React Redux: объект обновления обновляет состояние, но не вызывает селектор - PullRequest
0 голосов
/ 01 октября 2019

У меня есть избыточная ветвь, структурированная как:

{
  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 - я могу подтвердить это корректно обновляет мой редукс , однако это не вызывает повторное отображение моего списка. Если бы я должен был вызвать другое действие, т.е. удалить строку списка, список будет обновлен, чтобы отразить удаленный элемент, а также changeName, который ранее не вызывал повторного рендеринга.

Я знаю, что это как-то связано с моим $merge, и повторновставка с тем же значением key и более глубоким вложенным изменением field смешивает мой редукс, чтобы не заметить изменения состояния, но я не уверен, куда идти.

Спасибо

  • edit: я также использую пользовательский селектор для этого списка, который использует lodash / isEqual
export default createSelectorCreator(defaultMemoize, isEqual);

Я также пробовал:

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

без удачи

...