Реагировать с редукцией через thunk - getState не является функцией
В настоящее время я получаю сообщение об ошибке TypeError: getState не является функцией. Я пытаюсь выполнить что-то похожее на пример на http://redux.js.org/docs/advanced/AsyncActions.html
action.js - здесь возникает ошибка
export const fetchCategoriesIfNeeded = (dispatch, getState) => {
if(shouldFetchCategories(getState())){
return dispatch(fetchCategories())
}
}
App.js
componentDidMount(){
this.props.dispatch(fetchCategoriesIfNeeded())
}
...
const mapStateToProps = (state, props) => {
return {
isFetching: state.isFetching,
categories: state.categories
}
}
reducer.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: диспетчерская функция не является
export function fetchCategoriesIfNeeded(){
return(dispatch, getState) =>{
var state = getState()
if(shouldFetchCategories(state)){
dispatch(fetchCategories())
}
}
}
2 ответа
+ Изменить
export const fetchCategoriesIfNeeded = (dispatch, getState) => {
в
export const fetchCategoriesIfNeeded = () => (dispatch, getState) => {
Создатель вашего действия должен вернуть либо действие (или объект с type
ключ) или функция (любезно предоставлен редукс-стук). Ваша подпись функции передала вам два параметра, dispatch
а также getState
в то время как сигнатура второй функции не принимает параметров, но функция возврата принимает dispatch
а также getState
, которые обеспечиваются приставкой-редуктором.
Вы также можете написать это, чтобы избежать путаницы
export const fetchCategoriesIfNeeded = () => {
return (dispatch, getState) => {
// Do stuff
}
}
Надеюсь, это поможет!
Похоже, вы делаете что-то странное с тем, как вы вызываете рассылку.
Вы должны использовать mapDispatchToProps
функция также.
например. что-то вроде этого:
const mapDispatchToProps = (dispatch, props) => {
return {
onUpdate: dispatch(fetchCategories())
}
}
const mapStateToProps = (state, props) => {
return {
isFetching: state.isFetching,
categories: state.categories
}
}
а также:
componentDidMount(){
this.props.onUpdate();
}