比方说,我有一个简单的React
应用Redux
和Redux-Saga
。我想加载一些数据,但想确保数据未加载两次。数据将被多次请求。
我的天真实施如下:
function* loadMyData() {
const isMyDataLoaded = yield select(isMyDataLoadedSelector);
if (!isMyDataLoaded) {
yield call(loadMyData);
}
}
有更好的方法吗?
答案 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
之上实现某种记忆缓存。如果您从其他地方加载数据而不是从传奇加载数据,这将非常有用。