当前位置: 首页 > 知识库问答 >
问题:

Redux-多个商店,为什么不呢?

彭博厚
2023-03-14

IMO,这个架构决定属于应用程序开发人员基于他们项目的需求。那么,为什么如此强烈地建议Redux,几乎到了听起来强制性的地步(尽管没有什么能阻止我们建立多个商店)?

编辑:转换成单店后的反馈

在与redux合作了几个月后,许多人认为这是一个复杂的水疗中心,我可以说,单店结构是一个纯粹的工作乐趣。

    null
{
  apis: {     // data from various services
    api1: {},
    api2: {},
    ...
  }, 
  components: {} // UI state data for each widget, component, you name it 
  session: {} // session-specific information
}

有一个Normalizr,它根据模式对数据进行规范化。然后,它提供一个接口来处理数据,并通过ID获取数据的其他部分,就像字典一样。

当时我不知道Normalizr,所以我按照同样的思路构建了一些东西。relational-json接受一个模式,并返回一个基于表的接口(有点像数据库)。关系型JSON的优势在于,您的数据结构动态地引用数据的其他部分(本质上,您可以像普通的JS对象一样,在任何方向遍历数据)。它不像Normalizr那么成熟,但我已经成功地在生产中使用了几个月。

共有1个答案

华景明
2023-03-14

当您可能使用多个存储区时,也存在一些边缘情况(例如,如果您在每秒多次更新屏幕上同时出现的数千个项目列表时存在性能问题)。也就是说,这是一个例外,在大多数应用程序中,你永远不需要超过一个商店。

为什么我们要在文件中强调这个?因为大多数来自Flux背景的人会认为多存储是使更新代码模块化的解决方案。然而,Redux对此有不同的解决方案:还原剂合成。

将多个简化程序进一步拆分为简化程序树是在Redux中保持更新模块化的方法。如果你没有认识到这一点,在没有充分了解reducer组成的情况下就去多个商店,你将错过Redux单店架构的许多好处:

 类似资料:
  • 我有以下疑问 以及以下突变 并且响应是正确的,但apollo store不更新。(我有dataIdFromObject:

  • 问题内容: 在一个通过所有者ID将数据分为存储桶的流量应用程序中,我们应该使用一个内部将数据分成存储桶的存储,还是每个存储桶一个存储实例? 例如,我们有一个应用程序用户,他是多名运动员的教练。每个教练运动员都有零次或多次锻炼,并且教练可以同时查看一个或多个运动员的锻炼。 我们可以为所有运动员开设一家健身店;商店必须确保将所有数据分离到各个运动员桶中,并且每种商店方法都需要一个运动者参数。 或者,每

  • 问题内容: 在这里找不到有关此错误的任何信息: “存储区没有有效的reducer。请确保传递给CombineReducers的参数是一个值为reducer的对象。” 我的减速机 合路器 我的商店配置 问题答案: 您的陈述不正确。无论您使用一起, 或者 使用,如果你有出口。 换句话说,将更改为,或将import语句从更改为。

  • Button.js部分 我的问题是组件的道具似乎没有随redux商店更新。在onClick函数运行后,redux存储更新为正确的值,mapStateToProps也会以正确的状态运行,如果我尝试从prop记录状态,则仍然会获得旧值。如果我在返回JSX之前在render函数中执行相同的日志,那么我会从props中获得正确的状态,我无法理解为什么在redux存储被删除后它不会立即更新。因此,如果我将代

  • Google Play现在有了关于64位可比性的新规则--所有有二进制的APK也需要提供64位版本。我试图提交我的nativescript应用程序,它有一个64位二进制,但警告显示... 此版本不符合播放64位的要求 为什么?我有64位支持: Google Play中列出的原生平台 原生Plattformen arm64-v8a、armeabi-v7a、x86 谷歌甚至从我的AAB生成64位的AP

  • 我正在创建一个react组件,以基于lat/long坐标列表在地图上显示标记。 使用谷歌地图反应npm包,我有一个容器组件和一个地图组件。MapsContainer组件被包装在GoogleApiComponent HOC中,如下所示。 我现在需要做的是将这个MapContainer组件连接到用于lat/long组件列表的redux存储。我试过了 和 每次我收到以下警告并且我的贴图不渲染时:

  • 我正试着和redux thunk联系 我如何让调度从商店返回promise? 更具体地说: 我可能只是不理解这里的一些内容,但在所有使用的示例中,它们调用一个单独的异步事件(比如),它显然会返回一个。 我特别想要的是当我向商店发送一个动作时:我如何确保商店在上面的函数中发生任何其他事情之前,已经完全处理了该动作。 理想情况下,我希望商店能回报一些promise,但我不明白这是怎么发生的,在哪里发生

  • 有人能给我解释一下为什么Redux有两个函数mapStateToProps和mapDispatchToProps都将道具添加到容器中吗? 定义: MapStateTops是一个帮助组件获得更新状态(由其他组件更新)的实用程序 mapDispatchToProps是一个实用程序,它将帮助您的组件触发操作事件(调度操作可能导致应用程序状态的更改) 为什么Redux团队选择将其分为两个映射函数——也就是