redux - Redux ToolKit 中的调度未更改状态
问题描述
我试图在 redux 工具包的帮助下将数据传递到我的 redux 存储,但我无法这样做。我仔细检查了我的数据没有问题。这是我的代码:
//USER DETAILS
export const userDetailsSlice = createSlice({
name: 'userDetails',
initialState: { loading: 'idle', user: {} },
reducers: {
userDetailsLoading(state) {
if (state.loading === 'idle') {
state.loading = 'pending';
}
},
userDetailsReceived(state, action) {
if (state.loading === 'pending') {
state.loading = 'idle';
state.user = action.payload;
}
},
userDetailsError(state, action) {
if (state.loading === 'pending') {
state.loading = 'idle';
state.error = action.payload;
}
},
},
});
export const {
userDetailsLoading,
userDetailsReceived,
userDetailsError,
} = userDetailsSlice.actions;
export const getUserDetails = (id) => async (dispatch, getState) => {
dispatch(userRegisterLoading());
try {
const {
userLogin: { userInfo },
} = getState();
const config = {
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${userInfo.token}`,
},
};
const { data } = await axios.get(`/api/users/${id}`, config);
console.log(data);
dispatch(userDetailsReceived(data));
} catch (error) {
dispatch(userDetailsError(error.toString()));
}
};
我在调度操作之前控制台记录了我的数据:所以数据肯定在那里。因此我认为我的代码有问题。这是我的 redux 商店的代码:
import { configureStore } from '@reduxjs/toolkit';
import { photoListSlice, photoCreateSlice } from './photo';
import { userRegisterSlice, userLoginSlice, userDetailsSlice } from './user';
const reducer = {
userRegister: userRegisterSlice.reducer,
userLogin: userLoginSlice.reducer,
userDetails: userDetailsSlice.reducer,
};
const store = configureStore({ reducer });
export default store;
从这张照片中可以看出:调用了操作 userDetailsReceived 但用户的状态没有改变。
任何帮助或提示将不胜感激!!
解决方案
我在 getUserDetails 函数的第一次调度调用上打错了,我调度了 userRegisterLoading 而不是 userDetailsLoading... 现在它在更改后工作正常。
export const getUserDetails = (id) => async (dispatch, getState) => {
dispatch(userDetailsLoading());
try {
const {
userLogin: { userInfo },
} = getState();
const config = {
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${userInfo.token}`,
},
};
const { data } = await axios.get(`/api/users/${id}`, config);
console.log(data);
dispatch(userDetailsReceived(data));
} catch (error) {
dispatch(userDetailsError(error.toString()));
}
};
推荐阅读
- c++ - 从 .txt 文件将整数存储和读取到向量数组中
- python - 带有for循环的非常小的数字python
- c# - 带有 Dapper 的分层树表
- python - sklearn 如何使用 MultiOutputClassifier 进行多标签文本分类
- bioinformatics - 运行 Trinity 的问题 - 可能是读取文件格式?
- ruby-on-rails - 推送到 Heroku 时,Rails 应用程序预编译资产失败错误
- sql-server - 将密码存储在数据库中以供以后使用
- hibernate - 错误状态 500 源不是空 struts2 文件上传不起作用
- c# - 如何从删除按钮上的 GridView 中的行中获取值
- asp.net - Asp.net - 显示存储在 SQL Server 中的 word 文档内容