Javascript 将道具从redux映射到组件状态
在过去的两周里,我一直在使用React和Redux,但我并不完全确定这一切是如何工作的,在经过数小时的搜索,并没有真正找到我需要的信息后,我决定在安装组件后询问Javascript 将道具从redux映射到组件状态,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,在过去的两周里,我一直在使用React和Redux,但我并不完全确定这一切是如何工作的,在经过数小时的搜索,并没有真正找到我需要的信息后,我决定在安装组件后询问componentDidMountfire一次。但每次redux状态更新并且组件使用此状态字段时,redux都会向组件发送新的道具组件将接收道具将检查每一个新道具 componentWillReceiveProps(nextProps) { this.setState({ val1: nextProps
componentDidMount
fire一次。但每次redux状态更新并且组件使用此状态字段时,redux都会向组件发送新的道具<代码>组件将接收道具将检查每一个新道具
componentWillReceiveProps(nextProps) {
this.setState({
val1: nextProps.auth.val1,
val2: nextProps.auth.val2,
val3: nextProps.auth.val3
});
}
注
此生命周期现在已被弃用,称为不安全组件WillReceiveProps。查看下面的链接以查看备选方案
componetdimount仅在安装组件时才会被调用。 因此,您必须使用组件willreceiveprops,它在道具更改时被调用 为了更好地理解,请查看以下内容:
我面临着像您这样的问题,我意识到您可以使用componentWillReceiveProps或getDerivedStateFromProps,但您需要触发本地状态更改以映射新的props。我尝试了一些情况,但我不知道它何时会自动更改,因此我编写此函数以在调度操作时重新渲染:
setCount() {
let {count} = this.state;
this.setState({count: count++});
}
这不是最好的解决方案,但这是最容易做到这一点的方法。您可以尝试在
组件WillReceiveProps
生命周期中设置状态。顺便说一句,为什么你们要设置状态,而你们总是可以在reducer中设置一个动作来修改你们的道具?我只想直接操作道具,而不是把它分配给store。在每次更新redux store时,您必须注意导致创建样板代码的新组件状态,这只是一个旁注,您不应该在render()
中设置状态。当您调用setState()
时,它会触发一个渲染
,从而循环。这就是异步流的问题所在。看看答案哇,非常感谢你们的帮助@TriyugiNarayanMani你是对的,使用它,效果很好!我唯一担心的是这种方法似乎不安全?谢谢你,安德鲁!这很好用,不过我有点担心。。。componentWillReceiveProps现在已弃用