在react-native屏幕之一中处理道具更新的问题是,componentWillReceiveProps被调用了两次。为了解决这个问题,我正在按如下方式比较绑定的redux对象的状态ID
componentWillReceiveProps(nextProps) {
console.log("next id:" + nextProps.stateId + " this id: " + this.props.stateId);
if (nextProps.stateId == this.props.stateId || nextProps.loading || nextProps.facebookLoginErr) {
return;
}
if(nextProps.data)
{
var nextScreen = (nextProps.data.must_update) ? 'RegisterScreen' : 'ProductListScreen';
this.props.navigation.navigate(nextScreen);
} }
当redux对象的状态发生变化并且第一次运行该方法时,nextProps.stateId为1,而this.props.stateId为0,但是,当第二次运行该方法时,值完全相同。我期望的是this.props应该是 在方法运行后每次都更新为nextProps,但似乎没有发生。 可能的原因是什么?何时以及如何实际更新this.props?
2018-10-06 18:30:59.240 [info][tid:com.facebook.react.JavaScript] next id:0 this id: 1
2018-10-06 18:30:59.247 [info][tid:com.facebook.react.JavaScript] next id:0 this id: 1
我对状态和道具到组件的映射如下:
const mapDispatchToProps = { getFacebookToken };
const mapStateToProps = state => ({
data: state.facebookLogin.data,
loading: state.facebookLogin.loading,
facebookLoginErr: state.facebookLogin.error,
stateId: state.facebookLogin.stateId
});
export default connect(mapStateToProps, mapDispatchToProps)(WelcomeScreen);