componentWillReceiveProps не запускается, даже если состояние в редукторе явно изменилось - PullRequest
0 голосов
/ 18 ноября 2018

я знаю, что есть много ответов на этот же вопрос о 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 НЕ запускает.

Почему? Это серьезный блокатор для нас на данный момент, поэтому очень ценю помощь и совет. Надеюсь, это что-то очевидное, что я пропустил.

1 Ответ

0 голосов
/ 18 ноября 2018

хорошо - это отсортировано.проблема здесь, не имеет никакого отношения к Redux.Это было из-за пропущенного маршрута.Не то чтобы какое-либо из загадочных / несуществующих сообщений об ошибках имело какое-либо отношение к этому.Я беру на себя ответственность, но скажу, что официально я больше не фанат React Native.смерть от тысячи порезов.

...