Project (ToDoList) был создан с immutable
библиотеки, source hereКомпонент не размонтировать после его удаления в магазине
магазин структура: project
имеют много tasks
, В Redux магазина: State
- карта, projects, tasks
- Записей
Когда я асинхронно удаляю проект ...
export const removeProject = project => (dispatch) => {
if (!isProjectExist(project)) return Promise.resolve()
return projectService
.delete(project)
.then(
() => {
dispatch(remove(project))
console.log("post removeProject resolved")
},
handleError,
)
}
.... который был создан после инициализации - он будет удален и правильно демонтирована, но когда проект был принят в качестве initialState
- ProjectList
не будет rerendered и ProjectItem
пытаются оказывать себя устаревшие данные, и не, как показано на рисунке
Это выглядит например, реставраторы редукции меняют данные, но я использую immutablejs, и ранее я использовал normalizr-immutable
, но я думал, что источник проблемы в этой библиотеке и написать мой собственный normalizeInitialState
(source), это не помогло, теперь я думаю, что т может быть источником проблемы в redux-immutable
Я боролся весь день на решение этой проблемы
Я не думаю, что это то, что мы можем исправить. Изменения состояния реакции: асинхронный, и React может (или не может) их выполнять. Поэтому, момент, когда вы нажимаете «Удалить», обновляет магазин Redux, и оба пункта и App получают новое состояние. Даже если изменение состояния приложения приводит к отключению элементов , это произойдет позже, чем mapStateToProps - , вызвавший элемент.
Если я не ошибаюсь, мы ничего не можем с этим поделать. У вас есть два варианта:
Закажите все необходимое состояние на уровне App (или ниже, например, ItemList) и передайте его на «немые» предметы. Добавьте меры предосторожности в mapStateToProps для состояния «в настоящее время размонтирования». Например, вы можете вернуть нуль из визуализации в этом случае. Потенциально у нас мог бы быть компонент , сгенерированный функцией connect() return null из его рендеринга, если mapStateToProps null. Есть ли в этом смысл? Это слишком удивительно?
Хм, я никогда не видел окурки, как return (<div></div>)
или гарантии в mapStateToProps в другом коде