问题标签 [redux-persist]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
react-native - 仅在注册时存储导航状态并从中恢复
在应用程序的注册过程中,我希望 react-navigation 能够从以前的组件中恢复。但是,一旦用户登录,我不再需要从原来的位置恢复,我希望它从头开始。
我有 redux-persist 用于持久化我的 redux 状态,并且导航状态与 react-navigation 正确连接。但是我不确定是否:
- 一旦满足条件,我就可以停止保持导航状态。似乎白名单配置在持久化器中是硬编码的,无法更改。
- 有没有办法在 StackNavigator 根据状态本身的条件存储获取导航状态之前重置导航状态。
javascript - redux-persist 黑名单不起作用
我想将我的一些减速器列入黑名单,因为我的状态树越来越大并且我收到了这个错误:
无法将调试会话写入 localStorage:DOMException:无法在“Storage”上执行“setItem”:设置“redux-persist”的值超出了配额。(...)“
我找到的解决方案是将一些不需要持久化的reducer列入黑名单。所以我的代码中有这段代码App.js
我有这个rootReducer
:
我的persistReducer.js
和我的store.js
但是运行该应用程序,我仍然得到列入黑名单的持久状态,如您在此处看到的:
我尝试将黑名单键更改为:
但是钥匙仍然存在......如何正确地做到这一点?
javascript - redux-persist:persist 和 rehydrate 有什么区别?
什么时候应该坚持,什么时候应该补水?命名约定非常混乱,因为作者几乎没有提到它们在redux-persist上下文中的含义。
javascript - React Native,Android 生命周期和导航
我们正在构建一个 React Native 应用程序,它使用 redux-persist 来存储应用程序状态,包括导航状态。我希望这个应用程序在导航方面表现得像本机应用程序:
当原生 Android 应用程序进入后台,最终被操作系统停止并移动到前台时,它将在用户之前停止的 Activity 中恢复。如果同一个应用程序被用户杀死(或崩溃),它将在主 Activity 中打开。
对于一个 RN 应用,这意味着 redux-persist 应该在应用的 componentWillMount 中持久化并恢复导航状态,但前提是应用没有被用户杀死。
以下代码有效:
但它看起来很骇人听闻,我也不明白为什么全局范围仍然存在。
检测 RN 应用程序是否从后台重新打开的正确方法是什么?(最好有 iOS 支持)
javascript - 如何在 redux-persist v5 中使用白名单?
我尝试在 redux-persist v5 中使用白名单。
我在 Stack Overflow 上关注了这个答案,如下所示
但是,我得到了错误
传递给 persistStore 的无效选项:“白名单”。您可能错误地将persistConfig 传递给persistStore,而它应该传递给persistReducer。
然后我在阅读了 redux-persist自述文件后尝试了类似下面的内容
但它不起作用。它仍然通过 localForage 保存所有内容。
那么在 redux-persist v5 中使用白名单的正确方法是什么?
javascript - persistor.getState 不是函数——redux-persist
我正在尝试将我的不可变状态保留在 localStorage 中。下面是我的减速器 index.js
在我的 persistStore.js 中,我有类似下面的内容。
在我的主应用程序中,
我的应用程序返回以下错误。
未捕获的类型错误:persistor.getState is not a function at PersistGate._this.handlePersistorState (react.js:41) at PersistGate.componentDidMount (react.js:55) at ReactCompositeComponent.js:262 at measureLifeCyclePerf (ReactCompositeComponent.js:73) at ReactCompositeComponent.js:261 在 CallbackQueue.notifyAll (CallbackQueue.js:74) 在 ReactReconcileTransaction.close (ReactReconcileTransaction.js:78) 在 ReactReconcileTransaction.closeAll (Transaction.js:207) 在 ReactReconcileTransaction.perform (Transaction.js:154) 在batchedMountComponentIntoNode (ReactMount.js:124)
我在这里和Here阅读了有关 redux-persist 的文档。请问我做错了什么,错误意味着什么?任何帮助将不胜感激
reactjs - 如何使用 redux-persist v5?
我开始学习 redux 并尝试使用 redux-persist 来存储数据。由于 redux-persist 现在更新到 v5 并推荐使用 PersistGate。但是我几乎找不到关于 PersistGate 的文档。我写了一些代码,但发生了这个错误PersistGate(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.
这是我的代码:
store.js
index.js
编译器在 render() 中抛出错误。错误信息如上。您能告诉我如何正确使用 PersistGate 吗?或者我在哪里可以找到更多文档或示例?非常感谢!
javascript - redux-persist v5 配置的黑名单和白名单中的键是什么?
我试图将我的 redux 存储持久化到 sessionStorage,并且我希望一个减速器不要持久化。我试图将其名称添加到黑名单数组中,但它仍然保留整个商店。你们能告诉我配置中的键是什么吗?在文档中它显示如下
caching - Redux-persist:处理项目删除,不是从应用程序发起的
假设您有两个用于相同服务的待办事项列表应用程序,使用相同的数据库 - 一个 web 应用程序和一个 react 本机应用程序。用户可以在两者上登录到他们的帐户并从两者中创建/更新/删除他们的笔记。
考虑那些应用程序正在使用 redux-persist,例如,本机应用程序将商店持久化到 AsyncStorage 并在应用程序启动时对其进行水合,因此用户可以更快地看到他们的笔记。
考虑一个用户有 2 个待办事项并使用两个应用程序登录,两个待办事项存在于 db 中,以及 webapp 和 react native 应用程序的 redux 商店中。然后用户关闭 react native 应用并从 webapp 中删除一个 todo 项。由于是 webapp 发起了删除,因此调度了一个动作,并且从 webapp 的 store 和持久层(例如 localstorage)中清除了该项目。但是,react native 应用程序处于离线状态,因此,当用户启动 react native 应用程序时,它的 store 会从 AsyncStorage 中获取水分,并且已删除的 todo 项会显示给用户。这种情况如何解决?
如果用户从应用程序中删除了一个待办事项,很容易跟踪该项目已被删除(因为调度了一个动作)并从持久层中清除它,但是如果该动作是由另一个应用程序调度的(如在示例 - 由 web 应用程序,与反应本机应用程序相反),甚至是管理员从数据库中手动删除的?我必须以某种方式区分已删除的项目和未删除的项目。如何?
我考虑过一种方法,例如:“当获取待办事项时,将它们全部从持久层中清除”但是如果我有几种获取它们的方法 - 例如按标签,按日期,这看起来不太合适等,在这种情况下,我最终会清除我需要的东西。
您可以建议什么解决方案/模式来解决此类问题?
reactjs - redux-persist 出错:Store 没有有效的 reducer
使用 redux-persist 时出现错误。我可以找到一些关于 redux-persist v5 的文档。我只是按照官方的使用示例。但我对此感到困惑。在我使用 redux-persist 之前,我可以正确地从 store 中获取状态。但我想将登录状态保持在本地。所以我尝试使用 redux-persist。然后我遇到了一些问题。这是我的代码:
减速器.js
store.js
应用程序.js
当我运行此代码时,我收到此错误消息TypeError: Cannot read property 'isLogin' of undefined
并且控制台中的此错误消息Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.
我猜在组合减速器时有些事情是不正确的。但我不知道哪里错了?