Как мне распределить несколько действий в реагирующем с использованием хуков? - PullRequest
0 голосов
/ 11 октября 2019

Из приведенного ниже кода я пытаюсь отправить два действия, которые берут зарегистрированное имя и фамилию зарегистрированного пользователя из коллекции пользователей базы данных firestore и обновляют состояние имени и фамилии в моем приложении. Однако по какой-то причине отправляется только второе действие. Состояние фамилии в моем приложении обновляется, но состояние имени остается пустым.

Я пытался использовать асинхронную функцию для вызова диспетчеризации, но все еще ничего. Я пытался переместить код отправки в разные разделы кода и до сих пор ничего. Независимо от того, куда я положил код, вызывается только вторая отправка. Пока что ничего не работает. Я не могу заставить две отправки работать только одну. В качестве примечания, я не использую избыточность, или какое-либо промежуточное программное обеспечение просто реагирует на хуки с помощью useReducer и useContext.

firebase.auth().onAuthStateChanged(user => {
    if (user) {
        const userId = user.uid;
        const db = 
firebase.firestore().collection('users').doc(userId);
        db.get()
        .then(userId => {
            if (userId) {
                dispatch({
                    type: 'fill_name',
                    payload: userId.data().Name
                })
                dispatch({
                    type: 'fill_surname',
                    payload: userId.data().Surname
                })
            } else {
                return null;
            }
        })
    } else {
        navigate('Intro');
    }
});

1 Ответ

1 голос
/ 11 октября 2019

причина, по которой вы не можете отправить дважды из одного действия, - это основная причина, по которой логика {dispatch} создана для первого места. за то, что у вас есть одно место со всей «истиной о приложении», одним способом изменить Тору и одну гору, чтобы получить одну

, что вы можете сделать, отправив как имя, так и фамилию, как -


firebase.auth().onAuthStateChanged(user => {
    if (user) {
        const userId = user.uid;
        const db = 
firebase.firestore().collection('users').doc(userId);
        db.get()
         .then(userId => {
            if (userId) {
                dispatch({
                    type: 'fill_name',
                    firstName: userId.data().Name
                    surName: userId.data().Surname
                })
            } else {
                return null;
            }
        })
    } else {
        navigate('Intro');
    }
});

и при прослушивании в редукторе действия это будет выглядеть так:

   action.firstName

для имени

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...