Redux Thunk getState()返回所有状态

时间:2018-03-18 10:19:04

标签: reactjs redux redux-thunk

刚刚发现我可以使用getState()将状态值传递给动作创建者。但是我注意到getState()返回所有组合状态而不是参数中指定的状态。我做错了什么,因为我不认为这是正确的行为?

减速机:

import { combineReducers } from "redux";
import { reducer as reduxForm } from "redux-form";
import authReducer from "./authReducer";

export default combineReducers({
  auth: authReducer,
  form: reduxForm
});

动作创建者代码段:

export const handleProviderToken = token => async (dispatch, getState) => {
  let testState = getState("auth");
  console.log(testState); 
  const res = await axios.get(`${API_URL}/api/testEndpoint`);
  dispatch({ type: FETCH_USER, payload: res.data });
};

console.log(testState)向我显示整个状态树对象(auth和form,而不仅仅是auth)。

4 个答案:

答案 0 :(得分:5)

引用redux-thunk文档

  

内部函数接收存储方法dispatch和getState as   参数。

并引用redux的文档

  

getState()返回应用程序的当前状态树。它是   等于商店减速器返回的最后一个值。

因此,感谢redux-thunk传递的getState实际上是redux的getState()函数本身,因此它是默认行为。

要从状态树中获取特定值,您可以使用以下某个

const { auth } = getState() 
// OR
const testState = getState()
const auth = testState.auth

答案 1 :(得分:1)

这是正确的行为。 From docs

  

返回应用程序的当前状态树。它等于   商店减速机返回的最后一个值。

答案 2 :(得分:1)

这是正确的行为。您需要从完整状态中选择reducer密钥。

export const handleProviderToken = token => async (dispatch, getState) => {
  let testState = getState();
  let authReducer = testState.auth; 
  const res = await axios.get(`${API_URL}/api/testEndpoint`);
  dispatch({ type: FETCH_USER, payload: res.data });
};

答案 3 :(得分:0)

在类似情况下对我有用的是

const lastFetchedPage =getState().images.lastFetchedPage;

但是,我不知道它与指南如何配合。