【问题标题】:How to make volatile model/reference field?如何制作易失性模型/参考字段?
【发布时间】:2020-08-03 18:56:27
【问题描述】:

我想在应该是引用数组的模型中添加selection 字段。如果我将它添加到模型selection: types.array(types.reference(Todo)) 中,那么我会产生一些不良副作用,例如选择被保存/加载到快照中,并且在使用 UndoManager 中间件时,对选择的更改也会记录到撤消/重做历史记录中。如果我将选择放在 volatile 属性中作为普通数组,那么我将失去参考同步功能(即,如果从模型选择中删除的选定元素之一不会自动更新)。 有没有一种方法可以同时获得两者的好处?有没有办法忽略补丁/快照中的模型字段而不将其移动到 volatile?

【问题讨论】:

    标签: mobx-state-tree


    【解决方案1】:

    模型的好方法是只包含属于该实体的字段,并且您需要在快照中发送到服务器或其他地方。否则模型会变得混乱且难以管理。

    通常在这种情况下,我会将类似的属性放入单独的商店或子商店,例如绑定到特定页面/视图。所以在我看来,这更多的是结构性问题。

    【讨论】:

    • 如果这个属性在模型的动作中被非常积极地使用怎么办?我如何从其他商店注入它?选择是对模型对象的引用的集合也是有道理的,我只是不希望它出现在快照中并记录在撤消/重做中
    • 考虑这样的选项: 1. 将此数组作为操作参数传递 2. 使用getParent / getRoot 函数从父存储或根存储获取它 3. 将 ids 数组存储在 volatile 状态模型并在需要时使用resolveIdentifier 函数手动搜索参考。
    • 你能解释一下 2. 使用 getParent / getRoot 函数从父存储或根存储获取它吗?我不明白这有什么帮助。目前我正在考虑将根存储作为常规 mobx 存储,将选择保持为 id 数组并按照您的建议使用 resolveIdentifier 并在 MST 树模型的操作中传递选择。问题是现在我必须基本上将 MST 树模型中的每个操作都包装在根 MobX 存储的操作中。
    • 您的 MST 商店具有树结构,这意味着您可以借助这些功能在其中导航并从其他商店获取模型/商店中的数据。因此,您可以将引用数组从模型中移出到某个父存储并继续访问它。我不建议您将普通的 mobx 商店和 MST 商店混合使用。您应该能够使用 MST 构建您的商店树就好了。
    • 好的,我知道了,我会尝试将选择状态向上移动并仅应用撤消/重做我感兴趣的一个节点。我觉得我可以接受这个作为答案。
    猜你喜欢
    • 2018-01-18
    • 2013-10-30
    • 2020-11-08
    • 2022-12-09
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    相关资源
    最近更新 更多