项目(Todolist)是使用immutable
库source here
商店结构:project
有许多tasks
,在还原商店中存放: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
将不会被重新呈现,ProjectItem
尝试用陈旧的数据渲染自己,并失败,如图
看起来reducer returs改变了数据,但我使用的是immutablejs,之前我使用的是normalizr-immutable
,但我认为这个库中的问题来源并编写了我自己的normalizeInitialState
({{3} }),它没有帮助,现在我认为这可能是redux-immutable
我整天都在努力解决这个问题
我不认为这是我们可以解决的问题。反应状态的变化是 异步和React可能(或可能不)批处理它们。因此, 当你按“删除”,Redux商店更新,以及项目和 应用程序收到新状态。即使应用程序状态更改导致 卸载将在mapStateToProps之后发生的Items 要求物品。
除非我弄错了,否则我们无能为力。您有两种选择:
在App(或较低的,例如ItemList)级别请求所有必需的状态 并将其传递给“哑”项目。为mapStateToProps添加安全措施 用于“当前卸载”状态。例如,您可以返回null 在这种情况下从渲染。我们可能有这个组件 如果mapStateToProps,connect()生成的返回null将从其渲染返回null 返回null。这有意义吗?这太令人惊讶了吗?
嗯,我从未在其他代码中看到return (<div></div>)
中的存根或mapStateToProps中的保护措施
答案 0 :(得分:0)
markerikson
我不完全确定我的问题究竟是什么,但作为一个 猜测:听起来像子组件在重新渲染之前 父母是。这是React-Redux v4及更早版本的已知问题。该 v5 beta修复了这个问题。尝试安装react-redux @ next,看看是否 这会解决你的问题。