я знаю, что есть много ответов на этот же вопрос о SO, однако я прочитал их, и ни один из них, похоже, не решил проблему, которую я вижу. действительно нужна чья-то помощь в этом.
Сценарий
: у нас есть существующее приложение React Native (v0.42.3), которое есть в App Store, и все было хорошо. Сегодня из-за странной сторонней библиотеки нам нужно было удалить node_modules и перестроить. Это было сделано и никаких проблем. Приложение запускается нормально. Однако теперь по какой-то причине поток входа в систему нарушен, и это «кажется» связано с Redux. Это просто поток входа в систему. Вот, надеюсь, все детали:
пользователь касается входа в систему -> создатель действия при вызове -> успех -> редуктор вызовов -> состояние обновления, которое вызывает mapStateToProps (состояние)
проблема, которую я пока не могу решить - это:
1) mapStateToProps запускается, и вы можете видеть, что необходимое свойство (displayLoginModal
) изменилось с true
на false
2) componentWillReceiveProps
НЕ запускается, что прерывает поток приложения
Действие Создателя
..auth worked fine, then call..
dispatch({
type: LOGIN_USER_SUCCESS,
payload: { user: userInfo },
greeting: isNewUser ? "welcome" : "hi",
isLoggedIn: true,
waitingForLoginCompletion: false
});
dispatch({ type: SHOW_LOGIN_MODAL, display: false });
Редуктор
case SHOW_LOGIN_MODAL:
return {
...state,
displayLoginModal: action.display
};
case LOGIN_USER_SUCCESS:
return {
...state,
user: action.payload,
greeting: action.greeting,
error: "",
loginUserError: "",
faceBookLoading: false,
googleLoading: false
};
Компонент «Прием / прослушивание» (LoginView)
использую декоратор @connect
Вот функция mapStateToProps:
function mapStateToProps(state) {
console.log(state) <== **IMPORTANT. this IS showing that the prop has changed
const {
email,
password,
error,
... etc...
displayLoginModal <== this is the prop that IS changing (from true, to false)
} = state.auth;
return {
..snip.. other props etc...
displayLoginModal, <== returning it here
isConnectedToFirebase
};
}
....
@connect(
mapStateToProps,
{
updateTermsOfUseAndPrivacy,
emailChanged,
passwordChanged,
errorMessageChanged,
loginUserWithEmail,
loginUserWithFacebook,
facebookLogin,
googleLogin,
loginUserWithGoogle,
resetUserPassword,
setTermsOfUseAndPrivacy,
logout,
resetPasswordComplete
}
)
export default class LoginView extends Component {
... etc
Итак, еще раз - даже мысль, что mapStateToProps запускается и правильно отображает изменение значения свойств - по какой-то странной для меня неизвестной причине componentWillReceiveProps
НЕ запускает.
Почему? Это серьезный блокатор для нас на данный момент, поэтому очень ценю помощь и совет. Надеюсь, это что-то очевидное, что я пропустил.