redux-logger внезапно не показывает имена действий, только «объект, объект»

#reactjs #redux-saga #redux-actions

#reactjs #redux-сага #redux-действия

Вопрос:

Я изучаю react и пытаюсь заставить Redux работать, поэтому я использую Redux-logger. При отправке двух действий из App.js это работает так, как показано на верхнем изображении «ALBUME_DATA_LOADED».

Затем я делаю отправку из другого места и получаю этот вывод:

введите описание изображения здесь

Я не уверен, что отправил это действие «объект, объект». Я помещаю точку останова и журнал консоли, и странно, что react-logger улавливает действие, которое, я думаю, я не отправил..

Есть идеи?

Вот типы действий, которые я использую в приведенном ниже коде как userActionTypes :

Файл user.types.js:

 export const userActionTypes = {
    SAVE_USER_START: 'SAVE_USER_START',
    SAVE_USER_SUCCESS: 'SAVE_USER_SUCCESS',
    SAVE_USER_FAILURE: 'SAVE_USER_FAILURE',
};
  

Вот действие:

Файл user.actions.js;

 import { userActionTypes } from './user.types';
import { withFirebase } from '../../firebase';
import * as ROLES from '../../constants/roles';

const saveUserStart = () => ({
    type: userActionTypes.SAVE_USER_START,
});

const saveUserSuccess = user => ({
    type: userActionTypes.SAVE_USER_SUCCESS,
    payload: user,
});

const saveUserFailure = errMsg => ({
    type: userActionTypes.SAVE_USER_FAILURE,
    payload: errMsg,
});

const asyncSaveUser = ({ firestore }) => {
    return async dispatch => {
        const userRef = firestore.userDoc(firestore.auth.currentUser.uid);
        dispatch(saveUserStart());
        firestore.db
            .runTransaction(transaction => {
                // This code may get re-run multiple times if there are conflicts.
                return transaction.get(userRef).then(doc => {
                    if (!doc.exists) {
                        return Promise.reject('Transaction failed: User dont exist!');
                    }
                    const newRoles = doc.data().roles;
                    // new roll
                    newRoles.push(ROLES.USER);
                    // remove roll
                    newRoles.splice(newRoles.indexOf('ANONYMOUS'), 1);
                    // save it back
                    transaction.update(userRef, { roles: newRoles });
                    return newRoles;
                });
            })
            .then(newRoles => {
                dispatch(saveUserSuccess());
                console.log(`Transaction successfully committed role(s): ${newRoles}`);
            })
            .catch(error => {
                dispatch(saveUserFailure(error));
                console.log(error);
            });
    };
};

export default withFirebase(asyncSaveUser);
  

Комментарии:

1. У вас есть какое-то действие, type свойство которого является объектом, когда оно должно быть строкой. Вам нужно будет показать нам фактический код действия, а не только скриншот ошибки.

2. Спасибо, я добавил код к своему вопросу

3. И как вы используете asyncSaveUser

Ответ №1:

в dispatch saveUserSuccess() вы не можете передавать новые роли.

dispatch(saveUserSuccess(newRoles));

Комментарии:

1. Спасибо, ваше право должно передать пользовательский объект — что- firestore.auth.currentUser то

Ответ №2:

Причиной этого является ваш mapDispatchToProps.

 const mapDispatchToProps = dispatch => ({
  saveUser: () => dispatch(asyncSaveUser())
}); 
  

asyncSaveUser() не является создателем действия.

Комментарии:

1. Да, мне здесь нужно промежуточное программное обеспечение. Я использую промежуточное ПО Redux Saga для двух других действий и хотел не использовать Saga, поскольку это не сложный вызов. Какое промежуточное программное обеспечение вы предлагаете здесь? Удар?

2. Вы можете просто использовать redux saga, поскольку она у вас уже есть. Пусть этот генератор fn запускается каждый takeLatest(SAVE_USER_ASYNC, asnycSaveUser) .