我們有一個使用React + Redux + ImmutableJS的項目。我們的一位工程師最近增加了一個輔助方法來支持它傳遞時,一個組件作爲道具解構的ImmutableJS地圖:React Component Props的解構ImmutableJS映射
export function toObjectShallow(mapping: Map) {
const result = {};
mapping.map((value, key) => {
result[key] = value;
});
return result;
}
因此,我們仍然可以做以下和避免重複調用是詳細到Map.get
:
<XyzComponent {...toObjectShallow(this.props.xyz)}/>
是的,這實質上是使原始對象的兩個淺拷貝(我們的方法+解構)。這應該是最低的費用。我想知道,因爲我沒有在React/Redux/Immutable社區的其他地方看到這樣的推薦,還有什麼我錯過了會使這種不理想的嗎?
傳遞的屬性仍然是原始的,不可改變的道具。它只是包含的對象被突變,這並不重要,因爲它不會傳遞給組件。那麼,是什麼給了?這似乎是這樣一個簡單的解決方案,同時避免toJS()
。爲什麼不在任何地方提及?
對我有很大爭議的問題,以及你可以在這裏查看的一些原因:https://esdiscuss.org/topic/extensible-destructuring-proposal 從我的角度來看,沒有理由這樣做,因爲你可以通過映射到更智能的組件,並且仍然可以獲得不可改變的優勢,但使用您的方法,您仍然會改變容器。所以你可以更新或重新構建你的REDX端來獲得一個乾淨的狀態,而不需要傳播Immutable。 –