Redux Thunk中getState()返回全部合并状态而非指定状态的问题咨询
解答:
getState()返回完整状态是正常行为,你没操作错! 嘿,别慌,其实你完全没操作出错——getState()的设计初衷就是返回整个合并后的Redux状态树,这才是它的正常表现哦!你觉得“不正常”可能是对这个API的预期有点偏差啦。
先帮你理清楚核心逻辑:
Redux的核心是单一数据源,整个应用的所有状态都集中存放在一个store对象里。combineReducers只是帮你把不同功能模块的reducer拆分管理,最终还是会把各个reducer的状态合并成一个大的状态对象——所以getState()拿到完整状态是完全符合设计的。
结合你的代码来看怎么拿到指定状态
你的合并reducer代码是这样的:
import { combineReducers } from "redux"; import { reducer as reduxForm } from "redux-form"; import authReducer from "./authReducer"; export default combineReducers({ auth: authReducer, form: reduxForm });
这里你把authReducer挂载到了auth键,redux-form的reducer挂载到了form键,所以最终的完整状态结构是:
{ auth: /* authReducer管理的所有状态 */, form: /* redux-form管理的表单状态 */ }
如果想获取单个指定状态,只需要这样做
在你的action creator里,从getState()返回的完整对象中访问对应键即可:
export const yourActionCreator = () => (dispatch, getState) => { // 获取auth模块的状态 const authSpecificState = getState().auth; // 获取form模块的状态 const formSpecificState = getState().form; // 接下来就可以用这些单个状态做你需要的逻辑处理了 dispatch({ type: 'YOUR_ACTION_TYPE', payload: authSpecificState }); };
简单来说,getState()给你整个状态的“全貌”,你只需要从中挑选你需要的那部分就好啦~
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

