我在一个项目中看到,副作用行为定位在这样的行为中:
// ...in ItemListPage.js
function onCreateItem (name, title, content) {
this.props.dispatch(createItem({ name, title, content }));
};
// ...in ItemActions.js
function createItem(post) {
return (dispatch) => {
return callApi('items', 'create', {
item: {
name: post.name,
title: post.title,
content: post.content,
},
}).then(res => dispatch(addPost(res.post)));
};
}
以下是对此处锣的准确描述吗?
从虚拟DOM绑定到事件的函数名为onCreateItem
。
运行此功能时,会将操作分派给商店。该操作是调用action-creator(?)createItem
的结果。此操作是一个接受调度程序的函数对象。
Redux然后运行操作(它如何知道这样做?),传入调度程序。运行副作用逻辑(网络呼叫)。
通过这种方式,副作用逻辑保持在动作函数对象(?)和减速器(?)之外。
是否吞下了从动作返回的承诺 - 或者可以以某种方式检索它?
此代码的哪一部分正在使用redux-thunk
?
答案 0 :(得分:2)
理解此代码的最佳方法是了解redux-thunk
做什么以及中间件如何(真的)简单。
Redux-thunk是redux的中间件,可以通过接受function
操作来增强redux。默认情况下,redux只接受简单对象(不是类对象或函数),然后将所述操作分配给存储中的所有reducers。 redux-thunk做的是拦截动作,它是函数,然后通过引用调度方法调用(这些动作不分派给减速器),这就是它的意思简单。
在您的示例中,情况有点复杂,因为我们(我假设)对外部api端点进行了异步调用。当执行从用户与控件的交互流向项目时,让我们通过它。
onCreateActoin
事件处理程序,而不是createAction
。 (reducer) => promise
将传递给store.dispatch
。reducer
调用该函数。 Promise
创建新的callApi
。 .then
)。promise
气泡,原始dispatch
来电(onCreateAction
)callApi
的承诺完成。 then
。 addPost
被调用,结果传递给store.dispatch
。