react-redux with thunk - getState不是一个函数

时间:2017-08-23 02:47:00

标签: javascript asynchronous react-redux getstate

我目前收到错误TypeError:getState不是函数 我正尝试类似于{{3}}

的示例

action.js - 此处发生错误

webbrowser.open(filename)

App.js

export const fetchCategoriesIfNeeded = (dispatch, getState) => {
    if(shouldFetchCategories(getState())){
        return dispatch(fetchCategories())
    }
}

...

  componentDidMount(){
    this.props.dispatch(fetchCategoriesIfNeeded())
  }

reducer.js

const mapStateToProps = (state, props) => {
  return {
    isFetching: state.isFetching,
    categories: state.categories
    }
}

省略了一些可读性代码。

我也试过这个并接收TypeError:dispatch不是函数

function data (state = initialState, action){
    switch(action.type){
        case RECEIVE_CATEGORIES:
            return {
                ...state,
                isFetching: false,
                categories: action.categories
            }
        case REQUEST_CATEGORIES:
            return {
                ...state,
                isFetching: true
            }
        default:
            return state
    }
    return state
}

2 个答案:

答案 0 :(得分:1)

更改

export const fetchCategoriesIfNeeded = (dispatch, getState) => {

export const fetchCategoriesIfNeeded = () => (dispatch, getState) => {

您的动作创建者需要返回一个动作(也就是一个带有type键的对象)或函数(由redux-thunk提供)。你的函数签名让你传递了两个参数dispatchgetState,而第二个函数签名没有参数,但返回函数确实需要dispatchgetState通过redux-thunk。

您也可以将其写出来以避免混淆

export const fetchCategoriesIfNeeded = () => {
    return (dispatch, getState) => {
       // Do stuff
    }
}

希望有所帮助!

答案 1 :(得分:0)

看起来你正在做一些奇怪的事情,你如何调用这个调度。

您也应该使用i功能。

例如。像这样的东西:

mapDispatchToProps

和:

const mapDispatchToProps = (dispatch, props) => {
   return {
       onUpdate: dispatch(fetchCategories())
    }
}


const mapStateToProps = (state, props) => {
  return {
    isFetching: state.isFetching,
    categories: state.categories
    }
}