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
}