首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >redux-logger不会突然显示动作名称,只显示"object,object“

redux-logger不会突然显示动作名称,只显示"object,object“
EN

Stack Overflow用户
提问于 2020-10-28 19:43:36
回答 2查看 422关注 0票数 0

我学习了react,并尝试让Redux正常工作,所以我使用Redux-logger。当从App.js中分派两个动作时,它作为顶部图像显示"ALBUME_DATA_LOADED“工作。

然后,我从另一个地方进行调度,并获得以下输出:

我不确定我是否发送了"object,object“操作,我放置了断点和控制台日志,奇怪的是,react-logger捕捉到了一个我认为我没有发送的操作。

有什么想法吗?

下面是我在下面的代码中作为userActionTypes使用的操作类型

文件user.types.js:

代码语言:javascript
复制
export const userActionTypes = {
    SAVE_USER_START: 'SAVE_USER_START',
    SAVE_USER_SUCCESS: 'SAVE_USER_SUCCESS',
    SAVE_USER_FAILURE: 'SAVE_USER_FAILURE',
};

下面是操作:

文件user.actions.js;

代码语言:javascript
复制
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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-28 20:00:49

这样做的原因是您的mapDispatchToProps。

代码语言:javascript
复制
const mapDispatchToProps = dispatch => ({
  saveUser: () => dispatch(asyncSaveUser())
}); 

asyncSaveUser()不是动作创建者。

票数 1
EN

Stack Overflow用户

发布于 2020-10-28 19:58:12

在dispatch saveUserSuccess()中,不能传递newRoles。

dispatch(saveUserSuccess(newRoles));

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64572144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档