因此,我尝试使用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
时,什么都没有发生。为什么会这样?
答案 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对象。