【发布时间】:2018-01-24 07:16:31
【问题描述】:
这是我要实现的流程:所有用户的列表在我的后端 API 上是公开可用的,所以我希望查看该用户是否已经存在,如果不存在,则创建一个新用户。
我正在使用 Redux,并且正在使用 redux-observable 管理副作用。这是流程,以及我要发送的相关操作。
- 按钮单击调度操作
FIND_OR_CREATE_USER。副作用应该处理接下来的步骤。 - 在 API 后端查找用户 - 使用 userId 参数调度
GET_USER_BY_ID_REQUEST,副作用将执行 HTTP 调用。 - 接收用户-dispatch
GET_USER_BY_ID_SUCCESS,响应存储在状态中。 - 如果此响应为空,则使用
CREATE_USER_REQUEST创建一个用户。
现在唯一的问题是这个GET_USER_BY_ID_SUCCESS 也在应用程序的其他地方使用(例如,获取用户个人资料)。因此,如果响应为空,我无法收听GET_USER_BY_ID_SUCCESS 并在其后立即创建用户。只有在GET_USER_BY_ID_SUCCESS 跟在FIND_OR_CREATE_USER 之后才创建用户。
下面是我使用 redux-sagas 的方法:
function* findOrCreateUserSaga() {
yield put({ type: 'GET_USER_BY_ID_REQUEST', payload: userId });
yield take('GET_USER_BY_ID_SUCCESS');
const response = yield select((state) => state.user);
if (!response) {
yield put({ type: 'CREATE_USER' }, payload: someObject );
}
}
...
yield takeLatest('FIND_OR_CREATE_USER', findOrCreateUserSaga)
如何使用 redux-observable 以反应方式实现相同的流程?
【问题讨论】:
标签: redux redux-saga side-effects redux-observable