在商店

时间:2016-11-26 22:36:39

标签: redux react-redux redux-thunk

项目(Todolist)是使用immutablesource 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尝试用陈旧的数据渲染自己,并失败,如图enter image description here

It have tests

看起来reducer returs改变了数据,但我使用的是immutablejs,之前我使用的是normalizr-immutable,但我认为这个库中的问题来源并编写了我自己的normalizeInitialState({{3} }),它没有帮助,现在我认为这可能是redux-immutable

中的问题来源

我整天都在努力解决这个问题

source

  

我不认为这是我们可以解决的问题。反应状态的变化是   异步和React可能(或可能不)批处理它们。因此,   当你按“删除”,Redux商店更新,以及项目和   应用程序收到新状态。即使应用程序状态更改导致   卸载将在mapStateToProps之后发生的Items   要求物品。

     

除非我弄错了,否则我们无能为力。您有两种选择:

     

在App(或较低的,例如ItemList)级别请求所有必需的状态   并将其传递给“哑”项目。为mapStateToProps添加安全措施   用于“当前卸载”状态。例如,您可以返回null   在这种情况下从渲染。我们可能有这个组件   如果mapStateToProps,connect()生成的返回null将从其渲染返回null   返回null。这有意义吗?这太令人惊讶了吗?

嗯,我从未在其他代码中看到return (<div></div>)中的存根或mapStateToProps中的保护措施

1 个答案:

答案 0 :(得分:0)

markerikson

  

我不完全确定我的问题究竟是什么,但作为一个   猜测:听起来像子组件在重新渲染之前   父母是。这是React-Redux v4及更早版本的已知问题。该   v5 beta修复了这个问题。尝试安装react-redux @ next,看看是否   这会解决你的问题。