【问题标题】:How to ensure data is not loaded twice in Redux Saga?如何确保数据不会在 Redux Saga 中加载两次?
【发布时间】:2018-11-20 00:49:01
【问题描述】:

假设我有一个简单的React 应用程序,其中包含ReduxRedux-Saga。我想加载一些数据,但想确保数据不会加载两次。数据将被多次请求。

我的幼稚实现如下:

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

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: reactjs redux react-redux redux-saga


    【解决方案1】:

    有很多方法可以实现这一点,包括你提到的那一种——这很好。

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

    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 之上实现某种记忆缓存。如果您从 sagas 以外的其他地方加载数据,这将非常有用。

    【讨论】:

    • 如果loadMyData 调用第一次失败怎么办?
    • @DávidMolnár 好点,您可以将 api 调用包装在 try..catch 中,并在出现错误时启动另一个观察程序。
    猜你喜欢
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多