1
我使用ImmutableJS OrderedMap將ImmutableJS記錄存儲在React應用程序中。我想知道處理共享相同值的更新的慣用方式是不會失去對Record的引用。例如,假設下面的代碼是什麼,是更新在關鍵1 fooBars
對象,如果記錄在關鍵1更新保持完全相同的值在關鍵1.在ImmutableJS OrderedMap上更新記錄而不會丟失引用
import Immutable from 'immutable';
let fooBars = Immutable.OrderedMap();
let FooBar = Immutable.Record({id: undefined});
let fooBar1 = new FooBar({id: 1});
let fooBar2 = new FooBar({id: 1});
fooBars = fooBars.set(fooBar1.id, fooBar1);
// this will lose reference to fooBar1 despite the values not changing
// and cause the DOM to reconcile forcing a re-render of the component
fooBars = fooBars.update(fooBar2.id, fooBar2);
這是1解決方案,但這會使shouldComponentUpdate減慢約3倍。 shouldComponentUpdate方法運行很多,這將是一個非常大的性能影響。 – evkline
如果你不想做這個檢查,那麼不要換出基礎記錄。因爲fooBar1!== fooBar2,將key 1中的值從fooBar1更改爲fooBarN永遠不會導致相同的Immutable。 如果不是交換記錄,而是更新它們,您將取回原始對象,您可以使用===或pureRenderMixin。 fooBars.updateIn([1,「id」],function(){return 1})=== fooBars – Crob
好主意!謝謝! – evkline