В React native, как мне дождаться, пока команда redux изменит хранилище на выполнение fini sh, прежде чем запускать обновление на firebase - PullRequest
0 голосов
/ 10 июля 2020

Я в основном работаю над приложением, в котором люди могут задавать вопросы. Поэтому, когда пользователь задает новый вопрос, я обновляю свой магазин redux. И затем я sh вносил изменения в firebase. Но дело в том, что новые изменения не отражаются в firebase, поскольку обновление redux занимает некоторое время, и к этому времени функция обновления firebase уже была вызвана. Как мне изменить это?

Код, в котором я обновляю свой магазин и вызываю обновление firebase.

this.props.newQuestion(this.state.addedData);
    console.log("Hello there " + JSON.stringify(this.props.user));
    let temp = this.props.user;
    console.log("This is  temp" + JSON.stringify(temp));

    firestore()
      .collection("users")
      .doc(this.props.user.id)
      .update({
        user: temp,
      })
      .then(() => {
        console.log("From the then" + JSON.stringify(this.props.user));
        console.log("User updated!");
      })
      .catch((err) => {
        console.log(err);
      });

Определение моего диспетчера для этой функции обновления redux -

case ADD_QUESTION:
      //console.log("From the actions" + JSON.stringify(action.question));
      return {
        ...state,
        user: {
          id: state.user.id,
          name: state.user.name,
          email: state.user.email,
          courses: state.user.courses,
          // adding the new question everytime
          questions: state.user.questions.concat(action.question),
        },
      };

1 Ответ

1 голос
/ 10 июля 2020

Тушар, если последовал этой идее и ответ Коковина Владислава, обязательно проверьте. ссылку, а также его ответ ниже link-2-answer

component should be updated to receive new props.

there are ways to achieve your goal:

1. componentDidUpdate check if value is changed, then do something..

 componentDidUpdate(prevProps){
     if(prevProps.value !== this.props.value){ alert(prevProps.value) }
  }
2. redux-promise ( middleware will dispatch the resolved value of the promise)

export const updateState = (key, value)=>
Promise.resolve({
  type:'UPDATE_STATE',
  key, value
})
then in component

this.props.dispatch(updateState(key, value)).then(()=>{
   alert(this.props.value)
})
2. redux-thunk

export const updateState = (key, value) => dispatch => {
  dispatch({
    type: 'UPDATE_STATE',
    key,
    value,
  });
  return Promise.resolve();
};
then in component

this.props.dispatch(updateState(key, value)).then(()=>{
   alert(this.props.value)
})

надеюсь, что это поможет вам, этот ответ довольно хорошо объяснен.

...