链接 redux-actions 和 redux-promise-middleware
chaining redux-actions and redux-promise-middleware
我使用 redux-actions and redux-promise-middleware 来调度动作,同时使用 TypeScript 2.1
async await
支持。
这是一个同时使用 redux-actions
和 redux-promise-middleware
的动作
// create an async action
const fooAction = createAction('FOO', async () => {
const { response } = await asyncFoo();
return response;
});
// use async action
fooAction('123')
这是一个动作链接的例子,仅使用 redux-promise-middleware
const foo = () => dispatch => {
return dispatch({
type: 'TYPE',
payload: new Promise()
})
.then(() => dispatch(bar()));
}
redux-promise-middleware
中的链接如何与 redux-actions
一起使用?
你必须记住,即使 async await
看起来是同步的,它在幕后使用 Promise,并且 async
函数总是 return Promise,无论是否你用不用await
由于 createAction
的第二个参数是您的有效负载创建者,因此没有什么可以阻止您使用生成的对象。
这是一个基于您的初始代码的示例:
const fakeCall = () => new Promise(resolve => {
setTimeout(() => resolve({ response: 'ok' }), 1E3)
})
const fooAction = createAction('FOO', async () => {
const { response } = await fakeCall()
return response
})
const foo = () => dispatch =>
dispatch(fooAction())
.then(() => dispatch(bar()))
// or
const foo = () => async dispatch => {
await dispatch(fooAction())
dispatch(bar())
}
Aperçu 答案的问题是 "await" 是您阻塞了事件循环,您必须直接处理 Promises。
有一个 "redux-promise-middleware" 的替代方案,redux-auto 与 redux-promise-middleware 具有相同的 API,但还带有链接 reducer 调用的机制。
您的示例如下所示:
// UI code
actions.data.foo()
// store/data/foo.js
export function fulfillment(data,payload){
return data
} fulfillment.chain = actions.x.bar
export function action(payload){
return Promise.resolve()
}
真的,就是这样。您只需要将操作分配给链 属性,redux-auto 将在 redux 生命周期的正确位置调用它
To understand the above source. redux-auto automatically create actions and wires them to reduces based on the file structure. Where the folder name becomes the name of the property on the state. The files within a folder are actions to be performed on that part of the state.
我使用 redux-actions and redux-promise-middleware 来调度动作,同时使用 TypeScript 2.1
async await
支持。
这是一个同时使用 redux-actions
和 redux-promise-middleware
// create an async action
const fooAction = createAction('FOO', async () => {
const { response } = await asyncFoo();
return response;
});
// use async action
fooAction('123')
这是一个动作链接的例子,仅使用 redux-promise-middleware
const foo = () => dispatch => {
return dispatch({
type: 'TYPE',
payload: new Promise()
})
.then(() => dispatch(bar()));
}
redux-promise-middleware
中的链接如何与 redux-actions
一起使用?
你必须记住,即使 async await
看起来是同步的,它在幕后使用 Promise,并且 async
函数总是 return Promise,无论是否你用不用await
由于 createAction
的第二个参数是您的有效负载创建者,因此没有什么可以阻止您使用生成的对象。
这是一个基于您的初始代码的示例:
const fakeCall = () => new Promise(resolve => {
setTimeout(() => resolve({ response: 'ok' }), 1E3)
})
const fooAction = createAction('FOO', async () => {
const { response } = await fakeCall()
return response
})
const foo = () => dispatch =>
dispatch(fooAction())
.then(() => dispatch(bar()))
// or
const foo = () => async dispatch => {
await dispatch(fooAction())
dispatch(bar())
}
Aperçu 答案的问题是 "await" 是您阻塞了事件循环,您必须直接处理 Promises。
有一个 "redux-promise-middleware" 的替代方案,redux-auto 与 redux-promise-middleware 具有相同的 API,但还带有链接 reducer 调用的机制。
您的示例如下所示:
// UI code
actions.data.foo()
// store/data/foo.js
export function fulfillment(data,payload){
return data
} fulfillment.chain = actions.x.bar
export function action(payload){
return Promise.resolve()
}
真的,就是这样。您只需要将操作分配给链 属性,redux-auto 将在 redux 生命周期的正确位置调用它
To understand the above source. redux-auto automatically create actions and wires them to reduces based on the file structure. Where the folder name becomes the name of the property on the state. The files within a folder are actions to be performed on that part of the state.