Redux dispatch causing component local state to reset
我正在将Redux与React一起使用。我正在使用this.state(组件本地状态)保存组件特定的变量。问题在于,每当我调度一个动作(获取动作)和存储更新(装入)时,我的组件状态就会重置为初始状态。
这是我组件的正确行为吗?组件在第二次安装(重新渲染)时是否应该重置其状态?
如果(1)为true,当它从Redux商店接收新道具时,是否有办法在this.state中保留某些变量值?我不希望将所有组件的本地状态存储在Redux中。
- 不,通常不应该,但是您的代码中可能有不良做法,如果没有发布任何代码,很难说
-
谢谢@DominicTobias,很高兴知道。 Knowin使我更深入地了解了我的代码,并且看起来它可能是react-router-dom,导致<Switch> <Route确切路径=" component = {()=> <Login />} /> </ strong>中的组件</切换>要安装在道具上的组件更新。不确定为什么...继续进行故障排除。非常感谢!
-
您要在哪种生命周期方法中初始化状态?它应该在构造函数中
-
我在构造函数中定义它。类LoginForm_UsrPwd_Step1扩展了React.Component {构造函数(props){super(props)this.state = {usernameInput:``,passwordInput:''}}}
-
嗯,很奇怪,这通常会导致组件更新周期,而不是新的安装!
-
也许在react dev工具中使用highlight updates可能有助于查看是否有更多组件对此更改做出了预期的响应。
-
谢谢@Markus!不知道该功能是否存在。看起来react-route-dom <Route>组件引起了该问题。当我在Redux中调度操作时,它似乎先卸载然后再安装我的Login组件。
-
尤里卡!我找到了原因。我以错误的方式实现了react-router-dom Route组件。我正在使用路由器组件功能<Router component = {()=> <Login />} />,然后将其重新安装其子组件。相反,我应该在Router组件内使用render函数。现在,使用构造函数实例化组件状态就像是一种魅力。我将在几乎空缺的办公室(稍微有些尴尬)再赢几圈,然后收拾走:)谢谢您的支持!真的很感激。
原因:我以错误的方式实现了react-router-dom Route组件。我正在使用路由器组件功能
1
| <Router component={()=><Login / >}/> |
然后将重新安装子组件。
解决方案:使用Router组件中的render函数。
1
| <Router render={()=><Login / >}/> |