4

我目前收到错误 TypeError: getState is not a function 我正在尝试类似于http://redux.js.org/docs/advanced/AsyncActions.html上的示例

action.js - 此处发生错误

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

应用程序.js

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

...

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

减速器.js

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
}

为了便于阅读,省略了一些代码。

我也试过这个并收到 TypeError: dispatch is not a function

export function fetchCategoriesIfNeeded(){
    return(dispatch, getState) =>{
        var state = getState()
        if(shouldFetchCategories(state)){
            dispatch(fetchCategories())
        }
    }
}
4

2 回答 2

4

改变

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

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

你的动作创建者需要返回一个动作(也就是一个带有type键的对象)或函数(由 redux-thunk 提供)。您的函数签名让您传入了两个参数,dispatchgetState第二个函数签名不接受任何参数,但返回函数确实接受dispatchand getState,这是由 redux-thunk 提供的。

你也可以把它写出来以避免这样的混乱

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

希望有帮助!

于 2018-04-04T23:58:09.937 回答
0

看起来你在调用调度的方式上做了一些奇怪的事情。

你也应该使用一个mapDispatchToProps函数。

例如。像这样的东西:

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


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

和:

  componentDidMount(){
    this.props.onUpdate(); 
  }
于 2018-04-06T00:37:58.507 回答