reactjs - Mobx 状态树中的通用模型?

标签 reactjs mobx mobx-state-tree

我将拥有多个具有不同“规范”的“产品”

示例

产品

  • 相机
  • 笔记本电脑

相机规范

  • 百万像素数码相机
  • 品牌
  • 光学变焦

笔记本电脑 SEPC

  • 品牌
  • 内存大小
  • 操作系统
  • CPU 核心数量
  • 显示尺寸
  • 硬盘大小

我将有 2 个组件

  1. 过滤器组件
  2. 搜索结果

过滤器组件将是该产品的所有可用过滤器的列表。

搜索结果将是用户筛选结果时返回的结果,并向他们显示找到的每个产品的一些规范。

我正在使用 Mbox 状态树,但我不知道如何存储从服务器返回的“产品”,因为每个产品都有不同的属性。

我猜也许可以为每种类型制作一个模型

  .model({
    id: types.identifierNumber,
    Brand: types.string,
    OpticalZoom: types.string,
    MegaPixels: types.string,
  })

  .model({
    id: types.identifierNumber,
    Brand: types.string,
    RamSize: types.string,
    Os: types.string,
    Cores: types.string,
    Display: types.string,
   HarddriveSize: types.string,
  })

但现在我不知道如何访问组件中的 2 个不同模型,因为它将与这些模型绑定(bind)。

我可以制作 1 个巨大的模型,但我对这个想法并不着迷,因为许多属性都不会被使用。

我必须考虑的另一件事是,用户可以单击其中一个结果,该结果将转到另一个页面并显示所有详细信息。我可能会使用 MST 引用,以便访问它,如果我制作所有单独的模型,我将无法做到这一点。

任何建议,对我来说,我认为我需要更多的 json 或更动态的东西,所以我不确定 MST 是否是正确的解决方案,但我不是这方面的专家,所以我想看看它是否可以被使用。

最佳答案

使用types.union(相机,笔记本电脑)。每个类型的类别(或类型)类型键。然后使用 View 来获取特定类型。

const Camera = model({
  type: literal('camera')
});
const Laptop = model({
  type: literal('laptop')
});

const Data = model({
  products: array(union(Camera, Laptop))
})
.views( self => ({
  get cameras() {
    return self.products.filter( p => p.type === 'camera');
  },
  get laptops() {
    return self.products.filter( p => p.type === 'laptop');
  }
}))

关于reactjs - Mobx 状态树中的通用模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52210325/

相关文章:

react-native - 如何在 React Native 中持久化 Mobx 状态树?

javascript - 带 react 的 Jest/ enzyme - "Target container is not a DOM element."

reactjs - MobX + React Router 4 + @withRouter 总是在路由改变时重新渲染

redux - Aurelia 状态管理

javascript - MobX 状态树 - 模型数组不会触发更新

mobx-state-tree - "[mobx-state-tree] No matching type for union"错误

reactjs - Heroku 没有这样的文件或目录,stat '/app/client/build/index.html'

javascript - 如何在 ReactJS 中没有任何给定事件的情况下更新 UI

reactjs - 创建 react 应用程序 RangeError : Maximum call stack size exceededat Object. mkdirSync

javascript - 如何使用可观察值和计算值创建 mobx 类的深拷贝?