Моя проблема с обработкой обновления реквизита на одном из собственных экранов реакции заключается в том, что componentWillReceiveProps вызывается дважды.Чтобы справиться с этим, я сравниваю идентификаторы состояния привязанного объекта-избыточности следующим образом:
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);
} }
Когда происходит изменение состояния объекта-избыточности, и метод запускается в первый раз, 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);