mapStateToProps вызывается, но не вызывает componentWillRecieveProps, когда состояние имеет то же значение - PullRequest
1 голос
/ 15 мая 2019

У меня есть следующий редуктор:

export default function UserReducer(state = initialState, action){
let nextState;
switch(action.type){
    case USER_RECOVERY_CODE_VALIDATED:
    nextState = {
        ...state,
        recoverycodevalidated : action.payload.recoverycodevalidated
    }
    return nextState;
default:
     return state;
 }
}

И мой компонент подключен к магазину таким образом:

function mapStateToProps(state) {
    console.log("updated");
    return { recoverycodevalidated: state.user.recoverycodevalidated };
 }

export default connect(mapStateToProps)(ResetPasswordCodeScreen)

И когда реквизиты меняются благодаря функции mapStateToProps , я перенаправляю пользователя на следующий экран:

 async componentWillReceiveProps(newProps){
    console.log("updated props");
    if(newProps.recoverycodevalidated){
        this.props.navigation.navigate("ResetPasswordFinal", { userId: this.props.navigation.state.params.userId});
    }
}

Проблема в том, что когда состояние обновляется в первый раз и значение recoverycodevalidated устанавливается в подпорках, второй раз, если значение переменной такое же реквизиты не обновляются, так как метод componentWillRecieveProps не запускается, даже если mapStateToProps запускается каждый раз. Что я делаю не так?

1 Ответ

0 голосов
/ 15 мая 2019

Попробуйте использовать componentDidUpdate вместо

componentDidUpdate(prevProps) { 
     console.log("updated props");
     if (prevProps.recoverycodevalidated) {
        this.props.navigation.navigate("ResetPasswordFinal", { userId: 
        this.props.navigation.state.params.userId});
     }
}
...