如何在Redux中正确处理同步持久性操作?
使用Redux对应用程序进行反应。A有一个组合减速器,由如何在Redux中正确处理同步持久性操作?,redux,react-redux,Redux,React Redux,使用Redux对应用程序进行反应。A有一个组合减速器,由appStateReducer和CompetingReducer组成。这两者中的每一个都负责应用程序数据的某些部分。 执行操作时,我不仅希望更改相应的状态,还希望持久保存新状态,这样,如果用户在浏览器中重新加载应用程序页面,该状态将保留。 我的想法是添加第三个减速器,以便只考虑保存和加载操作(两个子状态分别)。 保存和加载将通过localbasepackage使用IndexedDB。所有db操作(添加、获取、更新、删除)似乎都是同步的,也就
appStateReducer
和CompetingReducer
组成。这两者中的每一个都负责应用程序数据的某些部分。
执行操作时,我不仅希望更改相应的状态,还希望持久保存新状态,这样,如果用户在浏览器中重新加载应用程序页面,该状态将保留。
我的想法是添加第三个减速器,以便只考虑保存和加载操作(两个子状态分别)。
保存和加载将通过localbase
package使用IndexedDB。所有db操作(添加、获取、更新、删除)似乎都是同步的,也就是说,似乎没有真正需要实现异步操作。更新:这是错误的,它是异步的,只是一些基本示例忽略了它
我不知道如何妥善处理这个问题
它与用typescript编写的React应用程序一样,所有组件都以类的形式实现。如果您使用的是中间件,则您已经可以访问所有数据,例如:
export const requestPost = (id) => (dispatch,getState) => {
// You can make an bank for post and check If data exist or not
const postState = getState().bank.posts.data;
const found = postState?.find((post) => post.id === id);
if (found) {
dispatch({ type: SUCCESS.POST, data: found });
} else {
dispatch({ type: REQUEST.POST });
API.get(`/post/v2?id=${id}`)
.then((res) => dispatch({ type: SUCCESS.POST, data: res.data[0] }))
.catch((err) => errorHandler(err, FAILURE.POST));
}
};
只需在DB或某处创建和还原保存数据,并在开始时读取它们。谢谢,但我无法在我的typescript项目中实现这一点。唯一的区别是,我调用localbase.collection('config').doc('some-key').get().then(…).catch(…),但是当我尝试在index.tsx(store.dispatch(loadContesticConfig())中分派正确键入的(或者看起来是正确的)操作创建者时,我得到了错误TS-2345。好像store dispatch方法无法正确地看到分派的操作一样(它抱怨缺少属性“type”-这是如果在每个操作中课程创建者返回值)已解决。是的,这就是解决方法。错误TS-2345是在其他地方解决的另一个问题。很高兴帮助您:)