You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redux Toolkit是否需自定义action creator?不同slice的reducer可重名吗?

问题1:能不能省略自定义action creator,直接调用slice导出的action?

完全可以,你现在手写的这三个自定义action creator属于完全冗余的代码,createSlice 本身就会为每个reducer自动生成对应的action creator,功能和你手写的完全一致,唯一需要调整的是你reducer里的取值字段:

  • 自动生成的action creator调用时传入的参数会挂载到 action.payload 上,你现在代码里写的 action.data、action.message 要改成 action.payload 才能正常取值。

优化后的代码可以直接删了你手写的三个自定义action creator,thunk部分改成如下写法即可:

export const postSearchTrip = (data) => (dispatch) => {
  dispatch(sendRequest());
  const call = {
    url: baseUrl + "trips/search",
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Authorization: "Bearer " + localStorage.getItem("token"),
    },
    data: {
      search: data,
    },
  };
  return axios(call)
    .then((response) => {
      dispatch(sendSuccess(response.data));
    })
    .catch((error) => {
      dispatch(sendFailed(error.message));
      alert(error);
    });
};

问题2:不同slice的reducer能不能使用相同命名?会不会冲突?

不会有任何问题,你可以所有请求类的slice都用sendRequest、sendSuccess、sendFailed这三个命名。
因为createSlice生成的action type会自动带上slice的name作为前缀,比如你当前slice的name是searchTrip,那它的sendRequest对应的action type是searchTrip/sendRequest,另一个名为getUser的slice里的sendRequest对应的type是getUser/sendRequest,二者是完全不同的唯一标识,不会出现互相触发的问题。

你甚至可以把这套请求通用的reducer逻辑抽成公共工厂函数,每次新建请求slice的时候直接调用生成,不用重复写相同的initialState和reducer代码,进一步减少重复代码。

进阶优化建议

如果想要进一步简化请求逻辑,可以直接用Redux Toolkit自带的createAsyncThunk,不需要自己手写thunk的loading、成功、失败调度逻辑;如果项目里接口比较多,更推荐用RTK Query,连slice代码都不需要手写,内置了缓存、去重、loading状态管理等能力,比自己封装slice效率高很多。


内容的提问来源于stack exchange,提问作者theNaukiMatic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 22:45:03