【发布时间】:2019-04-25 04:20:12
【问题描述】:
我有一个运行良好的 redux saga 设置。我的调度之一是创建一个新订单,然后一旦创建,我想用更新的状态做事。
// this.props.userOrders = []
dispatch(actions.createOrder(object))
doSomethingWith(this.props.userOrders)
由于 createOrder 操作触发了调用 API 的 redux saga,因此存在延迟,因此在调用我的函数 doSomethingWith 之前不会更新 this.props.userOrders。我可以设置一个超时,但这似乎不是一个可持续的想法。
我已经阅读了有关 Stack Overflow 的类似问题,并尝试实施相关的方法,但我似乎无法让它发挥作用。我希望下面的代码有人可以添加几行就可以了。
以下是相关的其他文件:
actions.js
export const createUserOrder = (data) => ({ 类型:'CREATE_USER_ORDER', 数据 })
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
}
【问题讨论】:
标签: reactjs redux redux-saga