如何为未知键定义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
相关产品推荐
相关产品推荐

