如何创建具有状态更新的事件(通过 getDerivedStateFromProps)
How to create an event with state update (by getDerivedStateFromProps)
我正在尝试将 componentWillReceiveProps
方法更改为静态 getDerivedStateFromProps
并且不知道如何在 getDerivedStateFromProps
函数中使用关键字 this。
最初,我想在 getDerivedStateFromProps
中使用 this.props.history.push()
,但不知道如何使用。
然后我尝试 returning 状态(正如 getDerivedStateFromProps
应该做的那样)并且无法用它创建事件。简单看一下代码将使我的问题更容易理解。
static getDerivedStateFromProps(nextProps, prevState){
if(nextProps.passwordResetResult.message==="Password reset
Successfully")
{
alert("Password reset successfully please login again");
this.props.history.push('/home')
}
}
我知道我应该 return 最后声明;但我没有发现它对我的目的有用,因为我不明白如何创建一个事件,该事件将在 return 之后状态更改时触发,然后触发 this.props.history.push()
.
以上代码导致错误
this.props is undefined.
我知道我不能在 getDerivedStateFromProps
中使用 this
关键字;我的假设是否正确?
getDerviedStateFromProps
是一个静态函数,所以你不能从它访问 this
,静态函数绑定到 class 本身而不是组件的实例。我相信它故意这样做是为了避免副作用。
所以不要使用 this.history.push
你应该使用你在生命周期钩子参数中得到的 nextProps.history.push
。
但是至于你的 use-case 因为你说你真的不需要 return 状态,这意味着你并不真的需要派生状态,因为你不改变基于内部状态在特定的道具上。您应该使用 componentDidUpdate
而不是 side-effects,请参阅 https://reactjs.org/docs/react-component.html#unsafe_componentwillreceiveprops
我正在尝试将 componentWillReceiveProps
方法更改为静态 getDerivedStateFromProps
并且不知道如何在 getDerivedStateFromProps
函数中使用关键字 this。
最初,我想在 getDerivedStateFromProps
中使用 this.props.history.push()
,但不知道如何使用。
然后我尝试 returning 状态(正如 getDerivedStateFromProps
应该做的那样)并且无法用它创建事件。简单看一下代码将使我的问题更容易理解。
static getDerivedStateFromProps(nextProps, prevState){
if(nextProps.passwordResetResult.message==="Password reset
Successfully")
{
alert("Password reset successfully please login again");
this.props.history.push('/home')
}
}
我知道我应该 return 最后声明;但我没有发现它对我的目的有用,因为我不明白如何创建一个事件,该事件将在 return 之后状态更改时触发,然后触发 this.props.history.push()
.
以上代码导致错误
this.props is undefined.
我知道我不能在 getDerivedStateFromProps
中使用 this
关键字;我的假设是否正确?
getDerviedStateFromProps
是一个静态函数,所以你不能从它访问 this
,静态函数绑定到 class 本身而不是组件的实例。我相信它故意这样做是为了避免副作用。
所以不要使用 this.history.push
你应该使用你在生命周期钩子参数中得到的 nextProps.history.push
。
但是至于你的 use-case 因为你说你真的不需要 return 状态,这意味着你并不真的需要派生状态,因为你不改变基于内部状态在特定的道具上。您应该使用 componentDidUpdate
而不是 side-effects,请参阅 https://reactjs.org/docs/react-component.html#unsafe_componentwillreceiveprops