首页 > 解决方案 > 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);
    }
  }
);

这是控制台中的结果: 控制台输出

有任何想法吗 ?我错过了什么吗?谢谢 :)

标签: react-nativeredux-thunk

解决方案


好的,我发现了我的问题,我只是专注于 thunk 而没有注意承诺拒绝。我试图解析一个不存在的 JSON ......只需删除GGLog("REJECTED CHANGEPASS:", JSON.parse(payload));切片中的 。现在工作正常!


推荐阅读