react-dva项目, 路由切换, state残留问题

// 外面连的是model的数据
<Main>
    <Inner data={dataSource}/>
</Main>

// Inner 结构大致如下:
    this.state={
        status="ALL"
    }
    ...
    <Select value={this.state.status} onChange={this.statusChange}>
        <Option value="ALL">所有</Option>
        <Option value="1">待审核</Option>
    </Select>

// <Inner /> 里有select筛选框, 筛选框的值放在state里。
// 切换路由的时候,select的值会被重置,这是正常的。
// 但是!! 如果我点击当前路由,是select里的state不会被重置,这时候就很诡异了。。。

这是从其他路由切过来 ↓↓

clipboard.png

`select`下拉选择其他值, 再次点击侧边的当前路由, 页面数据刷新(触发了`subscriptions`)
但是Inner残留了之前的`state` ↓↓

clipboard.png

是不是一定要把下拉这个state放到model里整体控制才能解决这个问题??

阅读 4.7k
2 个回答

现在的解决办法是: 在model里设置一个key, 这个key是后面组件的<Inner />key.
每次触发subscriptions, 就更改这个key, 强制重置组件。

各位有好的办法可以说下,现在这个办法感觉有点粗暴。

dispatch({
    type: 'updateState',
    payload: {
        modelKey: new Date().getTime()
    }
})

<Inner 
    key={modelKey}
/>
新手上路,请多包涵

你点击当前路由时, 当前页面组件有没有重新挂载呢? 没有render的话, state值不会重置

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题