我有一种情况,我在api调用成功后调度一个动作。
axios.get(url)
.then(response => {
console.log("RESPONDED", response, dispatch)
const payload = response
dispatch(fetchSucess(payload))
})
fetchSucess
的代码段:
const fetchSucess = (payload) => (dispatch) => {
console.log("FETCH SUCCESS HAPPENED", payload)
return {
type: someActionTypes.FETCH_ALL_SUCCESS,
payload,
}
}
现在奇怪的是,未触发FETCH_ALL_SUCCESS。如果我将return
替换为dispatch
,则它可以工作。当我从api回调调度它时,为什么它不起作用?
帮助将不胜感激!
答案 0 :(得分:1)
您遇到此问题是因为fetchSuccess
函数定义错误。如果您仔细看一下,您会发现调用fetchSucess(payload)
会返回箭头功能:
(dispatch) => {
console.log("FETCH SUCCESS HAPPENED", payload)
return {
type: someActionTypes.FETCH_ALL_SUCCESS,
payload,
}
}
dispatch
接受一个对象时,fetchSuccess
函数必须返回一个动作对象:
{
type: someActionTypes.FETCH_ALL_SUCCESS,
payload,
}
这就是fetchSuccess
函数应类似于此的原因:
const fetchSucess = (payload) => {
console.log("FETCH SUCCESS HAPPENED", payload)
return {
type: someActionTypes.FETCH_ALL_SUCCESS,
payload,
}
}
答案 1 :(得分:1)
看一下代码片段,我假设您使用的是redux-thunk中间件(您可能忘记提到了吗?)。在这种情况下,以下方法是正确的方法。
这里,fetchData
是一个重击,fetchSuccess
是一个动作。
const fetchSuccess = (payload) => ({
type: someActionTypes.FETCH_ALL_SUCCESS,
payload
})
const fetchData = () => (dispatch) => {
axios.get(url)
.then(response => {
console.log("RESPONDED", response, dispatch)
dispatch(fetchSuccess(response))
})
}