ReactJS + Redux + Reduc-thunk 无法发送承诺
ReactJS + Redux + Reduc-thunk Can't dispatch promise
当我尝试使用 redux 发送一个 promise 时,我收到了这条消息,但我没有看到我错了什么
Uncaught Error: Actions must be plain objects. Use custom middleware for async actions.
1) 这是我的 createStore
import { createStore, applyMiddleware, compose } from 'redux'
import thunk from 'redux-thunk'
import createLogger from 'redux-logger'
import RootReducer from '../reducers/root.reducer'
export default function configureStore(preloadedState) {
const store = createStore(
RootReducer,
preloadedState,
compose(
applyMiddleware(thunk), createLogger()
)
)
return store
}
2) 在我的组件中,我像这样发送我的动作
dispatch(myAction(myParam))
3) 这是我的操作代码
export function myAction(dispatch, myParam){
return fetchList(myParam)
.then(response => response.json())
.then(json => {
console.log(json)
})
.catch(err => {
if (err)
throw err
})
}
但是如果我这样调用我的操作,它就可以工作了:
myAction(dispatch, myParam)
我认为存在 redux-thunk 问题,但为什么...
对于 redux-thunk
,您必须 return 动作创建者的功能。
dispatch
将作为第一个参数传递给此函数,因此您可以在函数内的任何位置调用它以执行 dispatch
不同的操作。
export function myAction(myParam) {
return dispatch => {
fetchList(myParam)
.then(response => response.json())
.then(json => {
dispatch({
type: FETCH_LIST_SUCCESS,
list: json
});
})
.catch(err => {
if (err)
throw err;
});
};
}
仔细阅读 docs。
Thunk 允许动作创建者 return 函数而不是普通对象,因此您可以像
一样使用它
export function myAction(myParam) {
return dispatch => {
console.log("IN ACTION");
fetchList(myParam)
.then(response => response.json())
.then(json => {
dispatch({
type: FETCH_LIST_SUCCESS,
list: json
});
})
.catch(err => {
if (err)
throw err;
});
};
}
您正在 return 创建一个 Promise 对象,这是问题的一部分。
当我尝试使用 redux 发送一个 promise 时,我收到了这条消息,但我没有看到我错了什么
Uncaught Error: Actions must be plain objects. Use custom middleware for async actions.
1) 这是我的 createStore
import { createStore, applyMiddleware, compose } from 'redux'
import thunk from 'redux-thunk'
import createLogger from 'redux-logger'
import RootReducer from '../reducers/root.reducer'
export default function configureStore(preloadedState) {
const store = createStore(
RootReducer,
preloadedState,
compose(
applyMiddleware(thunk), createLogger()
)
)
return store
}
2) 在我的组件中,我像这样发送我的动作
dispatch(myAction(myParam))
3) 这是我的操作代码
export function myAction(dispatch, myParam){
return fetchList(myParam)
.then(response => response.json())
.then(json => {
console.log(json)
})
.catch(err => {
if (err)
throw err
})
}
但是如果我这样调用我的操作,它就可以工作了:
myAction(dispatch, myParam)
我认为存在 redux-thunk 问题,但为什么...
对于 redux-thunk
,您必须 return 动作创建者的功能。
dispatch
将作为第一个参数传递给此函数,因此您可以在函数内的任何位置调用它以执行 dispatch
不同的操作。
export function myAction(myParam) {
return dispatch => {
fetchList(myParam)
.then(response => response.json())
.then(json => {
dispatch({
type: FETCH_LIST_SUCCESS,
list: json
});
})
.catch(err => {
if (err)
throw err;
});
};
}
仔细阅读 docs。
Thunk 允许动作创建者 return 函数而不是普通对象,因此您可以像
一样使用它export function myAction(myParam) {
return dispatch => {
console.log("IN ACTION");
fetchList(myParam)
.then(response => response.json())
.then(json => {
dispatch({
type: FETCH_LIST_SUCCESS,
list: json
});
})
.catch(err => {
if (err)
throw err;
});
};
}
您正在 return 创建一个 Promise 对象,这是问题的一部分。