我有一个redux分支,其结构如下:
{
byId: {
1: { id: 1, name: 'Name 1', username: 'Username 1' },
2: { id: 2, name: 'Name 2', username: 'Username 2' },
3: { id: 3, name: 'Name 3', username: 'Username 3' },
...
},
...
}
我有一个美国案例,触发一个操作来更改条目名称,发布到我的API,返回完整的对象(以在其他来源操纵我的后端的情况下在本地反映更改),然后将其重新插入我的还原状态。
操作:
changeName(id, name) => {
// post to API
const object = <object from API>
dispatch({
type: 'UPDATE_USER',
byId: { id: object }
});
};
减速器:
case 'UPDATE_USER':
return update(state, {
byId: { $merge: action.byId }
});
我正在从呈现byId
中的行的列表中触发此操作-我可以确认正确地更新我的redux ,但是不会导致渲染我的列表中的“强”。如果我要触发其他操作,即删除列表行,列表将更新以反映已删除的项目,以及先前未引起重新渲染的changeName
。
我知道这与我的$merge
有关,并以相同的key
值重新插入,并且嵌套更深的field
改变了我的redux,以至于没有注意到状态改变,但我不确定从这里去哪里。
谢谢
export default createSelectorCreator(defaultMemoize, isEqual);
我也尝试过:
return update(state, {
byId: {
[action.id]: { $set: action.data }
}
});
没有运气