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

如何在Redux Action中获取Redux存储的数据?

在Redux Action中获取存储的state数据

当然可以在Redux Action里获取已经存在store中的数据!如果你用的是redux-thunk(从你的代码来看确实是用了thunk,因为action返回的是一个函数),那实现起来非常简单——thunk函数除了dispatch参数外,还能接收第二个参数getState,通过它就能拿到当前Redux store的完整状态。

具体修改步骤

你的createJob action目前缺少获取user_id和token的逻辑,咱们来调整一下:

  1. 给thunk函数添加getState参数
  2. 通过getState()获取state.auth里的user_id和token
  3. 在axios请求中使用这两个值

修改后的jobsActions.js代码

export function createJob(title, company, avatar, shortDescription, description, address, postcode, city, jobType, payment, price, duration, postDate ) {
  return function (dispatch, getState) { // 新增getState参数
    // 从store中取出user_id和token
    const { user_id, token } = getState().auth;
    
    return axios.post(JOBS_URL(user_id), {
      title,
      company,
      avatar,
      shortDescription,
      description,
      address,
      postcode,
      city,
      jobType,
      payment,
      price,
      duration,
      postDate
    }, {
      headers: { authorization: token }
    }).then((response) => {
      dispatch(addJob(response.data.job));
      // console.log(response.data.job)
    }).catch((err) => {
      // console.log(err);
      dispatch(addAlert("Couldn't create job."));
    });
  };
}

为什么这样可行?

从你的authAction.js代码来看,authUser action已经把user_id和token存储到了state.auth中:

export const authUser = (user_id, token) => {
  return { type: 'AUTH_USER', user_id, token }
}

而redux-thunk的核心能力就是让action创建函数返回一个可执行的函数,这个函数能访问到dispatch(用来分发action)和getState(用来获取当前状态),完美解决了你需要在action中复用已存储数据的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:22:18