【发布时间】:2017-10-03 11:22:41
【问题描述】:
我正在迁移一些代码以使用不可变 JS,特别是记录类型,并且我正在实现一些代码,将已从 API 读取的常规 JS 对象转换为记录类型,我很想确保我写这篇文章的方式是为了尽可能多地进行结构共享。
想象一下 NodeRecord 有 3 个字段 id, type and parent (还有其他字段,但对于
例子)
id 始终是唯一的
type 是一组
所以我只有 10 个“种子”,即
const LineSeed = new NodeRecord({type: 'line'})
所有不同类型的记录,然后当从 JS 对象转换为不可变时,我可以做类似的事情
if (node.type === 'line') {
return LineSeed({id: nodeId})`
}
这意味着结构的 {type: 'line'} 部分被重用了……哎呀!
接下来我想知道的是,我可以用parent字段做同样的事情吗,parent/type的不同组合太多,无法拥有全套种子对象,
所以我想知道是否有一些 merge() 的味道可以使这项工作发挥作用?
我已经尝试过标准合并,但它没有,即
node1.merge({parent: '111'}) // What could go here which would mean the
node2.merge({parent: '111'}) // parent gets shared between node1 and node2
正如预期的那样,通过调试器可以看到两个节点下存储了["parent", "111"]的两个不同实例。
现在您可能认为我走得太远了,但是没有 immutable 的代码版本已经遇到了使用过多内存的问题,所以不希望将 immutable 添加到其中(希望使用 immutable 会避免其中一些)
【问题讨论】:
-
要让
node1和node2共享parent,您必须对merge进行两次调用,并将相同的不可变映射作为参数。 -
@4castle Nah 这也不起作用我已经通过不可变代码进行了调试,现在意识到它没有以可行的方式实现......我会回答我自己的问题跨度>