Redux неизменяемый порядок изменения массива - PullRequest
0 голосов
/ 28 августа 2018

Итак, я пытаюсь изменить порядок массива с использованием приставки и неизменяемого. В основном я собираю текущий массив, изменяю его и обновляю состояние измененной копией, например:

case MOVE_LAYOUT: {
    const index = action.payload;
    const lower = index - 1;
    const element = state.getIn(['someArray', index]);
    if (action.direction === 'up') {
        const arr = state.get('someArray');
        const newArr = arr.splice(lower, 0, element);
        const remove = newArr.splice(index, 1);
        return state.set('someArray', remove);
    }
    return false;
}

Ради вопроса, давайте предположим, что action.payload передано правильно, и что console.log(remove.toJS()) вернет то, что я хочу. Однако при обновлении someArray ничего не происходит. С чего бы это?

1 Ответ

0 голосов
/ 28 августа 2018

Итак, вот ответ:

case MOVE_LAYOUT: {
    const index = action.payload;
    const arr = state.get('someArray').toJS();
    let next;
    if (action.direction === 'up') {
        next = index - 1;
    } else {
        next = index + 1;
    }
    const temp = arr[index];
    arr[index] = arr[next];
    arr[next] = temp;
    return state.set('someArray', fromJS(arr));
}

По сути, я сделаю копию массива и изменю индекс (переместимся на 1 вверх или 1 вниз) и верну копию измененного массива в состояние. Проблема с первоначальным подходом не заключалась в использовании .toJS() и .fromJS(), поэтому результаты представляли собой неизменяемый список, а не объект JS.

...