react-native - React Redux拒绝WithValue()不起作用
问题描述
我目前面临一个问题,当我在节点获取请求失败时尝试拒绝一个值时,thunkApi.rejectWithValue()
它不起作用。但是,当我的请求未决或已完成时,它工作正常。这是我的切片:
export const userSlice = createSlice({
name: "user",
initialState: initialState as User,
reducers: {
...
},
extraReducers: (builder) => {
...
builder.addCase(changePassUser.pending, (state) => {
GGLog("FETCHING CHANGEPASS API...");
state.isFetching = true;
return state;
});
builder.addCase(changePassUser.fulfilled, (state, { payload }) => {
GGLog("FULFILLED CHANGEPASS:", JSON.stringify(payload));
state.isFetching = false;
state.isSuccess = true;
state.isError = false;
return state;
});
// eslint-disable-next-line @typescript-eslint/no-explicit-any
builder.addCase(changePassUser.rejected, (state, { payload }: any) => {
GGLog("REJECTED CHANGEPASS:", JSON.parse(payload));
state.isFetching = false;
state.isError = true;
state.errorMessage = payload.data;
return state;
});
},
});
这是我的想法:
export const changePassUser = createAsyncThunk(
"users/password/update",
async ({ oldpassword, newpassword }: RegisterParameters, thunkAPI) => {
try {
const res = await changePassApi.changePass.return({
oldpassword: oldpassword,
newpassword: newpassword,
});
GGLog("API_CHANGEPASS_RES:", res);
const data = await res.json();
if (res.ok) {
GGLog("API_DATA_RESPONSE_OK: ", data);
const tokenData = JSON.stringify(res.headers);
const token = JSON.parse(tokenData).map["x-auth"];
await localStorage.store("token", token);
return data;
} else {
GGLog("API_DATA_RESPONSE_NOK: ", data);
return thunkAPI.rejectWithValue(data);
}
} catch (e) {
GGLog("Error while fetching Login API => ", e);
return thunkAPI.rejectWithValue(e);
}
}
);
这是控制台中的结果: 控制台输出
有任何想法吗 ?我错过了什么吗?谢谢 :)
解决方案
好的,我发现了我的问题,我只是专注于 thunk 而没有注意承诺拒绝。我试图解析一个不存在的 JSON ......只需删除GGLog("REJECTED CHANGEPASS:", JSON.parse(payload));
切片中的 。现在工作正常!
推荐阅读
- c - Is it worse in any aspect to use the CMPXCHG instruction on an 8-bit field than on a 32-bit field?
- android - 无法访问 Android Q 中的存储空间
- powershell - POWERSHELL RDP 文件打开
- java - 如何将导出的 java 对象的格式更改为文件?
- javascript - 在 APEX 中获取主题滚轮配置 JSON
- ios - 在 spritekit 中沿 UIBezierPath 绘制节点
- mysql - 如何提高 MySQL 存储过程运行 20 秒
- java - 如何过滤和限制 LDAP 中组对象的属性
- python - 为 json 文件进行正确的输入
- node.js - Firebase - 从两个数组中过滤数据