Redux不可变更改数组顺序

时间:2018-08-28 01:03:34

标签: redux immutable.js

因此,我尝试使用redux和immutable更改数组的顺序。我基本上要做的是获取当前数组,对其进行修改,并使用修改后的副本更新状态,如下所示:

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 :(得分:0)

所以这是答案:

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),然后将修改后的数组副本设置回state。初始方法的问题不是使用.toJS().fromJS(),因此结果是不可变的列表,而不是JS对象。