如何确保Redux Saga中没有加载两次数据?

时间:2018-06-10 17:39:02

标签: reactjs redux react-redux redux-saga

比方说,我有一个简单的React应用ReduxRedux-Saga。我想加载一些数据,但想确保数据未加载两次。数据将被多次请求。

我的天真实施如下:

function* loadMyData() {
    const isMyDataLoaded = yield select(isMyDataLoadedSelector);
    if (!isMyDataLoaded) {
        yield call(loadMyData);
    }
}

有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

有很多方法可以达到这个目的,包括你提到的那个 - 这很好。

另一种方法是等待加载操作一次:

function * loadMyDataSaga() {
   yield call(loadMyData);
}

function * watcher() {
    yield take(ACTIONS.LOAD_DATA);
    yield fork(loadMyDataSaga);
}

take效果 - 与takeEvery不同 - 只会等待一次LOAD_DATA操作。任何后续的LOAD_DATA调度都将被忽略。

除了redux / redux-saga图层之外,您还可以在loadMyData之上实现某种记忆缓存。如果您从其他地方加载数据而不是从传奇加载数据,这将非常有用。