我正在遷移一些代碼來使用Immutable JS,特別是一個記錄類型,並且我正在實現一些將已經從API中讀取的常規JS對象轉換爲Record類型的代碼,而我我熱衷於確保自己的寫作方式能夠儘可能多地進行結構共享。Immutable JS記錄結構共享
想象NodeRecord
有3場id, type and parent
(還有其他的,但多數民衆贊成足夠 的例子)
id
始終是唯一的
type
是一套< 10個選項(線條,矩形,橢圓形。 ..)
所以,我只是有10個 「種子」,即
const LineSeed = new NodeRecord({type: 'line'})
記錄各種不同類型的,然後從JS對象轉換爲不可變的情況下,我可以這樣做
if (node.type === 'line') {
return LineSeed({id: nodeId})`
}
這意味着{類型:「線」}的結構的一部分被再利用......吶喊!
我接下來想知道什麼,我可以做同樣的事情與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"]
兩個不同的實例。
現在你可能認爲自己已經領先於自己了,但是沒有不可變的代碼版本已經遇到了使用太多內存的問題,所以不希望不可變的添加到那裏(並且希望使用不可變的將避免一些)
對於'node1'和'node2'要共享'parent',你必須將兩個調用都作爲參數提供給'merge'同一個不可變映射。 – 4castle
@ 4castle那不行,或者我已經通過不可變的代碼進行了調試,現在意識到它沒有以一種可行的方式實現......我會回答我自己的問題 – sMoZely