React Native 已经有了异步存储。为啥我应该在我的 react native 应用中使用 Redux 和 Redux Thunk?

Posted

技术标签:

【中文标题】React Native 已经有了异步存储。为啥我应该在我的 react native 应用中使用 Redux 和 Redux Thunk?【英文标题】:React native already has Async Storage. Why should I use Redux and Redux Thunk in my react native app?React Native 已经有了异步存储。为什么我应该在我的 react native 应用中使用 Redux 和 Redux Thunk? 【发布时间】:2020-12-01 20:49:59 【问题描述】:

我有一个愚蠢的问题,但我对此感到非常困惑。如果 React Native 有可用的异步存储,为什么要使用 Redux 和 Redux Thunk?为什么我们不能将所有数据保存在异步存储中?使用 Redux 而不是 Async Storage 的目的/好处是什么?

【问题讨论】:

异步存储是持久的,其目的是在应用程序启动之间存储值。 Redux 是响应式编程概念的实现,不仅仅是作为 store。 【参考方案1】:

它们是不同的东西,服务于不同的目的。

异步存储是一种简单的键/值存储。它仅适用于字符串。所以你可以做到,AsyncStorage.set("someKey", "someValue") 就是这样。它的目的是在手机的文件系统上保存/持久化数据,以便可以在多个应用程序会话中使用它(关闭和打开应用程序)

Redux 是一个完整的状态管理解决方案,它允许您在应用程序运行期间将任何类型的 javascript 数据保存在内存中,并使其在应用程序的任何位置都可用。想想在一个 react-native 应用程序中,两个不同的组件如何不能轻易地看到和修改彼此的状态,它们必须有某种方式进行通信。基本上,Redux 可以帮助您做到这一点。

考虑到您的理解水平,我建议您在处理 Redux 之前先研究一下 React Context。它是一个比 Redux 简单得多的状态管理解决方案。它包含在 React 中/不需要不同的代码结构,还可以帮助您了解 Redux 的用途。

【讨论】:

异步存储在整个应用程序中都可用。为什么不像 Redux 那样使用它?我们可以通过它来改变我们组件的状态。是的,我也使用过 React Context。我知道使用它我们可以创建一个全局状态并使用提供程序向它添加功能。 @HasnainAli 异步存储仅是字符串并且在文件系统上。 Redux/Context 在内存中,可以传递任何数据类型、函数等。除了您必须编写和维护所有自己的视图和状态更新逻辑(已经由 redux/context 处理)这会非常缓慢。如果你想传递一个函数,你会怎么做?字符串解析和评估呢?如果你不明白为什么这是一个坏主意,你只需要相信我。您可能想问自己,为什么要花这么多精力来制作这些系统...... 第一行几乎清除了一切。感谢您的帮助【参考方案2】:

Redux 和异步存储是 2 个不同的概念。需要明确的是,Redux 是状态管理,异步存储就像客户端数据库。如果你熟悉 Web 开发,我可以说 Redux 就像会话存储,异步存储是本地存储。

表示 Redux 正在存储应用程序在你使用时的状态,当应用程序被杀死时,Redux 中的所有状态都将被删除。相比之下,即使应用被终止,异步存储也会存储应用的状态。

因此,有这两者的组合。示例:当用户第一次登录应用程序时,我们会将用户信息存储在异步存储中,以便下次用户无需再次登录。

【讨论】:

那么如果我使用 AppState 来检查应用程序是否打开呢?一旦应用程序被杀死,我就会清除异步存储。基本上,我使用异步存储的方式与使用 Redux 的方式相同。你能清除这个吗? 是的,你可以使用这种方式,但异步存储的 get 和 set 方法是异步操作,所以要注意这一点

以上是关于React Native 已经有了异步存储。为啥我应该在我的 react native 应用中使用 Redux 和 Redux Thunk?的主要内容,如果未能解决你的问题,请参考以下文章

React Native 为啥我的代码在完成任务之前执行? Promise.all().then() 异步问题

react-native 异步存储不保存,也没有错误

如何在 React Native 中使用异步存储存储唯一数据?

React native - 在渲染应用程序组件之前从异步存储中获取数据

用vscode开发react-native,为啥智能提示时有时无?

在 Web 平台上使用异步存储运行反应本机项目时出错