2016-11-26 2 views
0

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 пытаются оказывать себя устаревшие данные, и не, как показано на рисунке enter image description here


It have tests


Это выглядит например, реставраторы редукции меняют данные, но я использую immutablejs, и ранее я использовал normalizr-immutable, но я думал, что источник проблемы в этой библиотеке и написать мой собственный normalizeInitialState (source), это не помогло, теперь я думаю, что т может быть источником проблемы в redux-immutable


Я боролся весь день на решение этой проблемы


creator of redux says

Я не думаю, что это то, что мы можем исправить. Изменения состояния реакции: асинхронный, и React может (или не может) их выполнять. Поэтому, момент, когда вы нажимаете «Удалить», обновляет магазин Redux, и оба пункта и App получают новое состояние. Даже если изменение состояния приложения приводит к отключению элементов , это произойдет позже, чем mapStateToProps - , вызвавший элемент.

Если я не ошибаюсь, мы ничего не можем с этим поделать. У вас есть два варианта:

Закажите все необходимое состояние на уровне App (или ниже, например, ItemList) и передайте его на «немые» предметы. Добавьте меры предосторожности в mapStateToProps для состояния «в настоящее время размонтирования». Например, вы можете вернуть нуль из визуализации в этом случае. Потенциально у нас мог бы быть компонент , сгенерированный функцией connect() return null из его рендеринга, если mapStateToProps null. Есть ли в этом смысл? Это слишком удивительно?

Хм, я никогда не видел окурки, как return (<div></div>) или гарантии в mapStateToProps в другом коде

ответ

0

markerikson

Я не совсем уверен, что я следую за то, что именно ваша проблема, но как Угадайте: похоже, что дочерний компонент является повторным рендерингом до родителя .Это известная проблема с React-Redux v4 и ранее. v5 beta исправляет эту проблему. Попробуйте установить response-redux @ next и посмотрите, есть ли , который заботится о вашей проблеме.

 Смежные вопросы

  • Нет связанных вопросов^_^