Reactjs React-Redux:更新对象正在更新状态,但未触发选择器
我有一个redux分支,其结构如下:Reactjs React-Redux:更新对象正在更新状态,但未触发选择器,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我有一个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' }, ... }, ... } 我有一个美国案例,触发一个操作来更改条目的名称
{
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,返回完整的对象(在其他源操作我的后端时在本地反映更改),然后将其重新插入我的redux状态
行动:
changeName(id, name) => {
// post to API
const object = <object from API>
dispatch({
type: 'UPDATE_USER',
byId: { id: object }
});
};
我正在从一个列表触发此操作,该列表正在呈现来自byId
的行-我可以确认它正确更新了我的redux,但是它不会导致列表的重新呈现。如果我触发另一个操作,即删除列表行,列表将更新以反映删除的项目,以及先前未导致重新加载的changeName
我知道这与我的$merge
有关,并使用相同的键
值和更深嵌套的字段
更改将我的redux混合在一起,不会注意到状态更改,但我不确定从这里开始该怎么做
谢谢
- 编辑:我还为这个列表使用了一个使用lodash/isEqual的自定义选择器
return update(state, {
byId: {
[action.id]: { $set: action.data }
}
});
如果运气不好“我可以确认它正确地更新了我的redux,但是它不会导致我的列表重新出现”-这通常是一个变异redux存储的问题。你能提供更新功能的源代码吗?@lavor它正在使用@Arthur update只进行浅层合并。你能分享一下
update()
的结果吗?@JosephD。我怎样才能准确地分享这些信息?@JosephD。如果控制台记录我的update()
调用,我可以看到新的redux分支,其属性值已正确更新
export default createSelectorCreator(defaultMemoize, isEqual);
return update(state, {
byId: {
[action.id]: { $set: action.data }
}
});