Reactjs 我可以在redux中的组件中使用多个操作吗

Reactjs 我可以在redux中的组件中使用多个操作吗,reactjs,redux,axios,Reactjs,Redux,Axios,我有两个操作:userIdContainer,和projectContainer 在componentDidmount中,我使用这些操作获取项目数据和用户id 在project.js中: import React,{Component}来自“React”; 从“./Partials/Project/ProjectCard”导入项目卡; 从“./Partials/Project/AddNewProject”导入AddNewProject; 从“react redux”导入{connect}; 从“

我有两个操作:
userIdContainer
,和
projectContainer

componentDidmount
中,我使用这些操作获取项目数据和用户id

在project.js中:

import React,{Component}来自“React”;
从“./Partials/Project/ProjectCard”导入项目卡;
从“./Partials/Project/AddNewProject”导入AddNewProject;
从“react redux”导入{connect};
从“../../actions”导入{userIdContainer};
从“../../actions”导入{projectContainer};
从“jquery”导入$;
从“../../reducers/project”导入{project}”;
类项目扩展组件{
状态={
项目:[],
}
componentDidMount=()=>{
let token=localStorage.getItem('access_token');
让配置={
标题:{'Authorization':“bearer”+令牌}
};
axios.get(
“/api/projects”,
配置
)。然后(响应=>{
让{projects,userId}=response.data;
this.props.dispatch(userIdContainer(userId));
这个.props.dispatch(projectContainer(projects));
这是我的国家({
项目:项目
})
}).catch(错误=>{
});
}
render(){
console.log(this.props);
让projects=this.props.projects;
设项目=[];
国际单项体育联合会(项目){
aProjects=$.map(项目、函数(值、索引){
返回[];
});
}
返回(
{aProjects}
)
}
}
常量mapStateToProps=(状态)=>{
返回{
项目:state.project.projects,
userId:state.auth.userId
}
}
导出默认连接(MapStateTops)(项目);
在index.js中(我的操作)

export const userIdContainer=(userId)=>{
返回{
键入:“用户\u ID\u容器”,
用户ID
}
};
导出常量projectContainer=(项目)=>{
//console.log(项目);
返回{
类型:“项目容器”,
项目
}
}
在呈现该组件之后,
userId
返回未定义

如果我删除
projectContainer
操作,
userIdContainer
工作正常

在此组件中使用多个操作的最佳方式是什么

我用的是联合收割机减速器

import { combineReducers } from "redux";
import { auth } from "./auth";
import { project } from "./project";

export default combineReducers({
    auth,
    project
})
这是我的身份证

export const auth = (state =[] , action ) => {
    // console.log(action.type);
    switch (action.type) {
        case 'IS_TOKEN_VALID' :
            // console.log(action);
            return {
                    token : action.token,
                    isUserLoggedIn : true
                }
            case 'USER_ID_CONTAINER' :
                return {
                        userId : action.userId
                    }
        default :
            return 'default';
    }
}
和项目减速器

export const project = (state =[] , action ) => {
    switch (action.type) {
        case 'PROJECT_CONTAINER' :
            return {
                    ...state , 
                    projects : action.project
                }
        default :
            return 'default';
    }
}
如前所述

在默认情况下,我们返回先前的状态。对于任何未知操作,返回前一状态都很重要

原因-Redux将操作传递给所有减速器。也就是说,当您执行
this.props.dispatch(projectContainer(projects)),两个减速器都被调用

你需要更换

default :
  return 'default';

在两个减速器中

此外,当您这样做时,会完全覆盖状态:

return {
  token : action.token,
  isUserLoggedIn : true
}

return {
  userId : action.userId
}
您可能需要将其更改为

return {
  ...state,
  token : action.token,
  isUserLoggedIn : true
}

return {
  ...state,
  userId : action.userId
}

userId
未定义在哪里?在操作中还是在组件中?请同时包括还原程序的代码,以及如何确定组件userId中的“userIdContainer正常工作”未定义,如果我删除projectContainer操作,userIdContainer正常工作。在第一次渲染(控制台日志)中,userId有值,但在该projectContainer运行之后,用户ID已更改为未定义@布莱恩·汤普森(包括在内)@根纳迪·多加耶夫
return {
  ...state,
  token : action.token,
  isUserLoggedIn : true
}

return {
  ...state,
  userId : action.userId
}