gpt4 book ai didi

mobx-state-tree - 在Mobx状态树中扩展模型

转载 作者:行者123 更新时间:2023-12-03 16:15:39 24 4
gpt4 key购买 nike

我有一堆商店,每个商店都包含一个实体类型的列表,例如

const userStore = EntityStore.create(....)

const supplierStore = EntityStore.create(....)

有些商店可以提供其他功能,所以我写道
const orderStore = EntityStore
.views(self => ({
allByUserId: branchId => ....)
}))
.create(....)

到目前为止,一切都很好,但是现在我想创建一个“商店管理器”,其中包含所有此类商店的列表,但失败并显示一条消息,例如

Error: [mobx-state-tree] Error while converting ...
value of type EntityStore: (id: Order)> is not assignable to type: EntityStore,
expected an instance of EntityStore or a snapshot like ... instead
(Note that a snapshot of the provided value is compatible with the targeted type)



消息很清楚,我的“带有 View 的EntityStore”与“EntityStore”的类型不同。但这是它的扩展,所以我想知道是否有允许它的声明。 Java中的 List<? extends EntityStore>之类的东西?

还是一个不错的解决方法,允许我在不更改类型的情况下向 EntityStore添加其他功能?

最佳答案

不,你不能。因为.views()(基本上是其他点方法)每次调用时都会创建a whole new ModelType对象。

相反,您可以使用union类型:

  • types.union(options?: { dispatcher?: (snapshot) => Type, eager?:
    boolean }, types...)
    create a union of multiple types. If the correct type cannot be inferred unambiguously from a snapshot, provide a dispatcher function to determine the type. When eager flag is set to true (default) - the first matching type will be used, if set to false the type check will pass only if exactly 1 type matches.


下面还有一个有关 simulate inheritance by using type composition的示例:
const Square = types
.model(
"Square",
{
width: types.number
}
)
.views(self => ({
surface() {
return self.width * self.width
}
}))

// create a new type, based on Square
const Box = Square
.named("Box")
.views(self => {
// save the base implementation of surface
const superSurface = self.surface

return {
// super contrived override example!
surface() {
return superSurface() * 1
},
volume() {
return self.surface * self.width
}
}
}))

// no inheritance, but, union types and code reuse
const Shape = types.union(Box, Square)

因此, 没有继承,但是联合类型和代码重用

关于mobx-state-tree - 在Mobx状态树中扩展模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54566567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com