如何在Redux Action中获取Redux存储的数据?
在Redux Action中获取存储的state数据
当然可以在Redux Action里获取已经存在store中的数据!如果你用的是redux-thunk(从你的代码来看确实是用了thunk,因为action返回的是一个函数),那实现起来非常简单——thunk函数除了dispatch参数外,还能接收第二个参数getState,通过它就能拿到当前Redux store的完整状态。
具体修改步骤
你的createJob action目前缺少获取user_id和token的逻辑,咱们来调整一下:
- 给thunk函数添加
getState参数 - 通过
getState()获取state.auth里的user_id和token - 在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
相关产品推荐
相关产品推荐

