我正在做一个基于react-boilerplate
模板的React.JS项目。不幸的是,react-boilerplate
只有一个将远程数据加载到redux中的例子。没有保存示例。
我能够编写save
动作、减速器和传奇,没有问题。这都是很标准的东西。然而,有一个问题阻碍了我,我无法解决——保存后重新加载存储。
我做了以下操作:
const mapDispatchToProps = dispatch => {
return {
loadEvent: eventId => dispatch(loadEvent(eventId)),
saveEvent: values => {
const event = dispatch(saveEvent(values))
return dispatch(loadEvent(event.id || values.id))
}
}
}
我希望上面的代码能起到承诺的作用——在保存完成后按id重新加载事件。
它没有按我需要的方式工作。我调用了负载,但存储中没有新数据。
您应该为每个请求创建一些xxxx_REQUEST
和xxxx_SUCCESS|FAILURE
操作types
(保存与否并不重要(。我不知道你是redux saga或redux thunk,但在你的请求获取完成后,你应该调度xxxx_SUCCESS|FAILURE
,然后在你的reducer中,获取数据并将其存储在你的存储中。
然后,您可以使用选择器从组件中的redux存储中获取数据。
我通过在我的传奇故事中粘贴以下内容来解决这个问题:
try {
// Call our request helper (see 'utils/request')
const createdEvent = yield call(request, requestURL, {
method: !isNaN(id) && id !== undefined && id !== null ? 'PUT' : 'POST',
body: JSON.stringify(event)
})
yield put(eventLoaded(createdEvent, id))
yield put(loadEvent(createdEvent['id']))
} catch (err) {
yield put(eventLoadingError(err))
}
现在,事情按我需要的方式进行。