我有一个redux saga设置,运行良好。其中一个调度是创建一个新订单,一旦创建完成,我想对更新的状态进行操作。
// this.props.userOrders = []
dispatch(actions.createOrder(object))
doSomethingWith(this.props.userOrders)
由于createOrder操作触发了redux saga调用API,存在延迟,因此在调用doSomethingWith函数之前this.props.userOrders不会被更新。我可以设置一个定时器,但这似乎不是一个可持续的想法。
我已经阅读了Stack Overflow上的类似问题,并尝试实现相关的方法,但似乎无法让它工作。我希望有人能够在我的下面的代码中添加几行来解决这个问题。
以下是相关的其他文件:
actions.js
export const createUserOrder = (data) => ({ type: 'CREATE_USER_ORDER', data })
Sagas.js
function * createUserOrder () {
yield takeEvery('CREATE_USER_ORDER', callCreateUserOrder)
}
export function * callCreateUserOrder (newUserOrderAction) {
try {
const data = newUserOrderAction.data
const newUserOrder = yield call(api.createUserOrder, data)
yield put({type: 'CREATE_USER_ORDER_SUCCEEDED', newUserOrder: newUserOrder})
} catch (error) {
yield put({type: 'CREATE_USER_ORDER_FAILED', error})
}
}
Api.js
export const createUserOrder = (data) => new Promise((resolve, reject) => {
api.post('/userOrders/', data, {headers: {'Content-Type': 'application/json'}})
.then((response) => {
if (!response.ok) {
reject(response)
} else {
resolve(data)
}
})
})
订单减速器:
case 'CREATE_USER_ORDER_SUCCEEDED':
if (action.newUserOrder) {
let newArray = state.slice()
newArray.push(action.newUserOrder)
return newArray
} else {
return state
}
render()
... 那么如何使用dispatch/selectors处理这个问题:this.api.editObject.then(navigate...).catch(...validationErrors)
- Thomas Stubbe