我编写了一个登录组件,该组件运行良好,但无法确定登录成功后移至登录页面的正确方法。
我知道它会以某种方式涉及:
if (this.props.user) {
this.props.navigation.navigate("Main");
// I'm using react-native-navigation. But any implementation of "now go to the home page" would go here.
}
我尝试将其放在我的render
方法的顶部,该方法可以工作,但是却收到错误/警告(调试控制台中的错误,模拟器中的警告),并说“警告:无法更新在现有状态转换过程中(例如在render
中)。渲染方法应仅是props和state的函数。”
说得通。但是我无法想到放置它的实际位置。
PS,我尝试过此操作,但它根本不起作用(导航不会发生)
shouldComponentUpdate() {
if (this.props.user) {
this.props.navigation.navigate("Main");
return false;
}
return true;
}
答案 0 :(得分:2)
您的最后一种方法几乎是正确的
shouldComponentUpdate() {
if (this.props.user) {
this.props.navigation.navigate("Main");
return false;
}
return true;
}
但是,您正在使用this.props,这是更新之前的旧道具。新的props作为方法的第一个参数传递。在这种特殊情况下,还建议在 shouldComponentUpdate 上使用 componentWillReceiveProps ,因为引入了 shouldComponentUpdate 以防止组件更新。
所以,这会变成这样:
componentWillReceiveProps(newProps) {
if (newProps.user) {
this.props.navigation.navigate("Main");
}
}