【发布时间】:2020-01-13 19:01:52
【问题描述】:
我目前有几个 api 获取数据,这反过来又需要来自先前 api 的数据,以便后续 api 获取必要的数据,具体取决于交互和路由。目前,我已经将所有这些联系在一起,并且与我的减速器和动作配合得很好。但是,我想知道如何根据本地状态是否已经可用有条件地获取数据?
我的理想解决方案是在用户第一次加载数据后利用本地状态,而不必继续在其初始实例上获取数据。我见过很多从 api 中提取数据的例子,但是没有一个例子可以说明出于性能原因使用本地数据(已经获取),而不是每次渲染组件/页面时都必须调用 api。
解决这种情况的最佳方法是什么?
这是我目前所拥有的,想知道这是否是一个好方法?
idea.sagas.js
function shouldFetchIdeas() {
const state = store.getState();
if (!state.idea.ideas) {
return true;
} else {
return false;
}
}
export function* fetchIdeas({ payload: organizationId }) {
if (shouldFetchIdeas()) {
try {
const fetchApi = yield axios(
`https://api.getconflux.com/api/v1/public/${organizationId}/ideas`
);
yield put(fetchIdeasSuccess(fetchApi.data.rows));
} catch (error) {
yield put(fetchIdeasFailure(error.message));
}
}
}
export function* onFetchIdeasStart() {
yield takeLatest(IdeasActionTypes.FETCH_IDEAS_START, fetchIdeas);
}
export function* ideaSagas() {
yield all([call(onFetchIdeasStart)]);
}
这目前有效,但感觉很脏。我有大约 3-4 个 api 调用,我上面展示的就是一个例子。是否有替代方法或正确方法来利用本地状态而不必每次都获取数据?
无论如何,很高兴听到您的想法,或者是否有更好的管理方法,或者您是否可以指导我找到任何解决方案或任何示例。
提前致谢!
【问题讨论】:
-
此问题可能已关闭,因为它没有明确的问题陈述。您也没有提供有关问题规模的任何背景信息,以及为什么这对您来说是个问题
-
@imjared 我已经内置了持久化,但无论如何我都会继续从 api 获取数据。当您已经获取它之后就不需要了。例如,如果我进入一条新路线然后返回,它将重新获取数据,而不是使用我们已经加载的数据。我希望在第一次初始获取后只使用本地状态,然后为不同的交互操作状态。
-
@Sananes - 你为什么要再次获取想法?如果您在开始时获取它们,您可以使用
redux来管理它们而无需再次获取它们 -
@jank 很抱歉不清楚。这正是我所指的。不必再次获取数据。获取一次,然后只使用全局应用程序状态。但我的问题是每次我更改路线并访问显示它获取的(已经获取的数据)的页面与使用全局应用程序状态中可用的内容时。我只是想知道是否有特定的最佳实践方式来做到这一点。到目前为止,我所做的只是一个查看数据是否已经可用的函数,如果是,则不要获取。
标签: reactjs redux react-redux local-storage redux-saga