【问题标题】:How to share a single instance of an object among multiple actions?如何在多个动作之间共享一个对象的单个实例?
【发布时间】:2017-05-30 06:46:36
【问题描述】:

我有一个 React/Redux 应用程序,它与 API 进行大量通信,并处理来自数据库的大量很少更改的数据。为了减少流量和改进 UE,我现在想创建一个缓存机制,通过自动使用可用的最佳技术(从 IndexedDB 下降到 LocalStorage 等)在客户端存储数据。

我创建了一个cache 对象,它进行初始检查以确定存储机制(保存到engine 属性,因此检查只需要运行一次)。它还有一些基本方法save(key, value)load(key),然后为最初确定的机制调用相应的函数。

缓存对象及其方法确实有效,但我想知道如何在应用程序加载时仅在我的主 index.js 中创建一次缓存,然后在我的操作中使用这个对象,而不是每次都重新创建另一个缓存对象?

顺便说一句:将缓存作为我的应用程序状态的一部分感觉是错误的,因为它实际上并不包含运行应用程序所需的大量数据(如果没有可用的缓存,则只能调用 API)。

我是否需要以某种方式将缓存注入到我的操作中?还是我需要在主 window 对象中创建一个全局/静态缓存对象?

感谢您对此问题的澄清和想法。

【问题讨论】:

    标签: javascript node.js redux react-redux


    【解决方案1】:

    redux-thunk 中间件提供了一个您可以使用的 custom argument injection 功能。

    创建商店时

    const cache = createCache()
    
    const store = createStore(
      reducer,
      applyMiddleware(thunk.withExtraArgument(cache))
    )
    

    然后在你的动作创建器中

    function getValue(id) {
      return (dispatch, getState, cache) => {
        // use cache
      }
    }
    

    【讨论】:

    • 谢谢,这听起来很有希望 - 没有双关语的意思;)我会看看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 2012-09-27
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    相关资源
    最近更新 更多