问题描述
我有一个问题,关于如何在不同组件的reducer值发生变化时如何触发一个组件中的函数。
我目前在Home
组件中有一个函数可以在ComponentDidMount
中运行。如果我的值this.props.reducer.run
为true,则会触发该函数。初始状态设置为true
,因此该功能会在应用首次加载时触发。
在我的Profile
组件中,我有一个切换开关,它具有将this.props.reducer.run
切换到true
或false
的功能。还原器值发生更改时,是否可以在Home
中触发我的函数?
下面是我所拥有的代码的模拟,我想知道ComponentDidUpdate
是否是我应该看的,如果可以的话,请多多指导:
Home.js
...
myFunction() = > {
console.log('fired')
}
ComponentDidMount() {
//runs on load
if(this.props.reducer.run == true) {
this.myFunction()
}
}
...
**Profile.js**
...
toggleRun = () => {
this.props.setRun(!this.props.reducer.run)
}
...
解决方法
是的,您可以使用componentDidUpdate
进行此操作。调用componentDidUpdate
时,它将传递组件props的先前值(我们称之为prevProps
)。通过将prevProps.reducer.run
与this.props.reducer.run
进行比较,可以确定值是否更改,如果已更改,则相应地调用函数。
或者,如果这是一个功能组件,则可以使用useEffect
来实现。