我正在学习redux-thunk中间件作为初学者的反应开发人员,但我不明白为什么函数(由redux-thunk返回)返回一个promise(由fetch()返回)
我试图不退回任何东西,但是它起作用了,那么为什么我们退回它呢?
export function getCourses() {
return fetch(baseUrl)
.then(handleResponse)
.catch(handleError);
}
export function loadCourses() {
return function(dispatch) {
dispatch(beginApiCall());// dispatch some synchronous action
return courseApi
.getCourses().then(courses => {
dispatch(loadCourseSuccess(courses));
}).catch(error => {throw error;});
};
}
对于名为MyComponent的组件,分派loadCourses()操作
function MyComponent(props){
.......
useEffect(() => {
loadCourses()
});
const mapDispatchToProps = {
loadCourses,
.....
}
}
答案 0 :(得分:1)
好吧,首先函数返回一些数据,因为您要求它返回某种结果return function(dispatch) {...}
。
如果要忽略返回的结果,只需从return
中删除return function(dispatch) {...}
。
其次,由于您编写对API函数的调用的方式(包装在promise中,并且在函数完成时不返回回调),因此该函数返回Promise。
如果要获取API调用的实际结果,则应使用Async / Await语法。
答案 1 :(得分:1)
我想我从同事那里得到了答案。
如果您要链接某些活动,则您的操作将需要返回一个Promise。
这是在返回结果后允许链接活动的好方法!
答案 2 :(得分:0)
使用普通的基本Redux存储,您只能通过调度操作来进行简单的同步更新。中间件扩展了商店的功能,并允许您编写与商店交互的异步逻辑。
Thunk是基本Redux副作用逻辑的推荐中间件,其中包括需要访问存储的复杂同步逻辑以及诸如AJAX请求之类的简单异步逻辑。https://github.com/gaearon/redux-thunk
thunk中间件知道如何将thunk异步动作转换为动作,因此您只需要使simple_action()成为thunk,然后thunk中间件就可以为您完成工作,如果中间件看到正常的动作,会将该操作作为正常操作进行调度,但是如果它是异步功能,则会将您的异步操作转换为正常操作。