React Redux:更新对象正在更新状态,但不触发选择器

时间:2019-10-01 09:35:47

标签: 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' },
    ...
  },
  ...
}

我有一个美国案例,触发一个操作来更改条目名称,发布到我的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,以至于没有注意到状态改变,但我不确定从这里去哪里。

谢谢

  • 编辑:我还在使用lodash / isEqual
  • 的列表中使用自定义选择器
export default createSelectorCreator(defaultMemoize, isEqual);

我也尝试过:

return update(state, {
  byId: {
    [action.id]: { $set: action.data }
  }
});

没有运气

0 个答案:

没有答案