You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为未知键定义MobX类型?关联数据模型创建咨询

解决MobX-State-Tree中动态键关联结构的建模问题

看起来你是在尝试用MobX-State-Tree(MST)建模一个键为动态唯一ID的关联结构,你的初始写法有点偏差——你把动态的ID当成了模型的固定属性,而实际上我们需要的是一个映射(Map)结构,键是那些事先无法预知的唯一ID,值是对应的RelationModel数组。

正确的建模方式

1. 先定义基础的RelationModel

首先确保你已经定义了RelationModel(这里给出一个简单示例,你可以根据实际需求修改):

const RelationModel = types.model("RelationModel", {
  id: types.number,
  // 在这里添加你的关联模型所需的其他属性
});

2. 定义包含动态关联的父模型

使用types.map()来创建动态键的映射,值类型设为RelationModel的数组(如果需要默认空数组,可以用types.optional()包装):

const ParentModel = types.model("ParentModel", {
  // 直接用types.map包裹数组类型,键就是动态的唯一ID
  relations: types.map(types.array(RelationModel)),
  
  // 如果你希望每个键对应的数组默认是空数组(而非undefined),可以这样写:
  // relations: types.map(types.optional(types.array(RelationModel), [])),
});

3. 初始化模型(匹配你的示例数据)

用你提供的数据集初始化模型实例:

const parentInstance = ParentModel.create({
  relations: {
    "19271934": [{ id: 19271894 }],
    "19621318": [{ id: 19621538 }, { id: 19621586 }],
    "19788661": [{ id: 19788191 }],
    "19788662": [{ id: 19788192 }],
  },
});

关键说明

  • types.map()是MST专门用于处理动态键-值对的类型,键会被自动转换为字符串,完美适配你那些未知的唯一ID作为键的场景。
  • 你最初的写法错误地将动态ID当成了模型的固定属性(relationId),而正确的逻辑是把这些ID作为映射的键,对应的值才是关联数组。
  • 访问特定ID的关联数据非常方便:parentInstance.relations.get("19271934")就能拿到该ID对应的关联数组。

内容的提问来源于stack exchange,提问作者meowzart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:38:56