在 React Native 中缓存/保留数据

Rau*_*aul 5 javascript caching design-patterns reactjs react-native

在我的 React 开发生涯中,我发现我们可以在 RN 应用程序中使用多种缓存/持久化。

  1. 第一个是 React Native 直接提供的AsyncStorage。这允许我们将数据存储在用户设备的持久性中。

  2. 我们还可以开发自己的内存缓存,它可以通过避免向服务器发出不必要的请求来提高应用程序的性能。

  3. 最后一个对我来说不是缓存,是React Context。这个工具对于同步我们的应用程序路由来说非常酷。例如,典型的 UsersProvider,我们可以在其中存储用户数据的上下文。我也看到一些程序员也使用这个工具作为“缓存”。

我的问题是关于干净的代码。在结合了这 3 个“工具”的 React 架构中,我们如何正确地将它们的使用委托给应用程序的每个部分?

例如,在具有以下文件夹的项目中

components/
   auth/
      AuthForm.js


contexts/
    users/
        UsersContext.js


screens/
   Profile/
       EditProfile.js

services/
   api/
      firebase/
         content/
           getContentFeed.js
           cache/
              contentCache.js
   
         users/
             getUserData.js 
             cache/
                 usersCache.js
Run Code Online (Sandbox Code Playgroud)

在不考虑第三个工具(上下文)的情况下,上下文是专门可从钩子/组件使用/访问的,每个“memoizer”(异步存储和内存中缓存)应该在哪里使用而不违反任何模式或“干净代码”规则?

AsyncStorage 是否设计为可在任何地方使用?我的意思是,在组件、钩子、上下文、类、utils、helpers、api...内部有完全的自由吗?

内存缓存怎么样?例如,看一下我的“usersCache.js”,我在其中存储从服务器获取的用户数据。正如你所看到的,我已经定义了自己的 api 来向后端发出请求...所以,如果在我的“getUserData.js”中我正在从缓存中存储/获取/更新数据,以避免发出不必要的请求,你会吗?您是否认为在 api 外部(组件内部或前端的任何位置)使用这种缓存是不良组织或反模式的产物?

有什么建议或建议吗?