在我的应用程序中,如果用户从登录屏幕登录,我想导航到仪表板屏幕。我的代码就是这样。
// Login Screen
componentDidUpdate() {
const { auth, history } = this.props;
redirectIfAuthenticated(auth.isAuthenticated, history, './dashboard');
}
static getDerivedStateFromProps = (nextProps, prevState) => {
if (nextProps.errors)
return { errors: nextProps.errors }
return { errors: prevState.errors }
}
// auth util
export const redirectIfAuthenticated = (isAuthenticated, history, screen) => {
if (isAuthenticated) {
history.push(screen);
}
}
这按预期工作。我想知道即时通讯是否以正确的方式进行。我用getDerivedStateFromProps替换了componentWillRecieveProps。现在,我还必须使用componentDidUpdate来实现与componentWillRecieveProps相同的功能。这是正确的
答案 0 :(得分:2)
是的,这是你应该怎么做。看看getDerivedStateFromProps's documentation
此外,您可以返回null以避免更新状态,因此我将prevState.errors部分更改为this:
static getDerivedStateFromProps = (nextProps, prevState) => {
if (nextProps.errors) {
return { errors: nextProps.errors }
} else {
return null
}
}