У меня есть компонент для редактирования событий. Он встроен как:
<EventWizard
event={event}
categories={categories}
saveEvent={saveEvent}
/>
Событие сохранения - это вызов диспетчеризации, сопоставленный с реквизитами как:
const mapDispatchToProps = dispatch => {
return {
loadEvent: eventId => dispatch(loadEvent(eventId)),
saveEvent: values => dispatch(saveEvent(values)),
loadCategories: () => dispatch(loadCategories())
}
}
Внутренние взаимодействия обрабатываются сагой, и мой обработчик сохранения выглядит следующим образом:
export function* saveEventDetails({ event }) {
const id = event['id']
const requestURL = `${url}/promoter/event/${
!isNaN(id) && id !== undefined && id !== null ? id : 'new'
}`
try {
// Call our request helper (see 'utils/request')
const savedEvent = yield call(request, requestURL, {
method: !isNaN(id) && id !== undefined && id !== null ? 'PUT' : 'POST',
body: JSON.stringify(event)
})
yield put(eventSaved(savedEvent, savedEvent['id']))
yield put(loadEvent(savedEvent['id']))
yield put(loadPreviousEvents())
yield put(loadUpcomingEvents())
} catch (err) {
yield put(eventSavingError(err))
}
}
Мой маршрут POST вернет идентификатор только что созданного события.
Я хочу, чтобы можно было получить доступ к коду, так сказать. Моя сага перезагрузит только что созданное событие из бэкэнда, но мне нужен способ выбрать его из магазина. Это требует знания идентификатора события.
Что-то вроде
const newlyCreatedEventId = await saveEvent(event)
Есть предложения? Возможно, я мог бы перехватить eventSaved (), который отправляется с идентификатором события [new].