У меня есть настройка сагов-редукторов, которая работает нормально.Одна из моих отправок - создать новый заказ, а затем, когда он будет создан, я хочу что-то делать с обновленным состоянием.
// this.props.userOrders = []
dispatch(actions.createOrder(object))
doSomethingWith(this.props.userOrders)
Поскольку действие createOrder запускает сагу-редукт, который вызывает API,задержка, поэтому this.props.userOrders не обновляется до вызова моей функции doSomethingWith.Я мог бы установить тайм-аут, но это не похоже на устойчивую идею.
Я читал подобные вопросы о переполнении стека и пытался реализовать методы там, где это уместно, но я не могу получитьэто работает.Я надеюсь, с моим кодом ниже, что кто-то может просто добавить пару строк, которые будут это делать.
Вот другие соответствующие файлы:
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
}