0
我有保留克隆父元素被卸載時嵌套原始元素的引用的問題。不知道我做錯了什麼。Reactjs ref在銷燬克隆元素後丟失
有頁面結構類似這樣的
<Sortable>
<Collapsible ref='Collapsible-1'>...</Collapsible>
<Collapsible ref='Collapsible-2'>...</Collapsible>
</Sortable>
- 可排序組件包裝每個孩子Sortable__item組件
- 當用戶開始排序(拖)Sortable__item部件之一,我React.cloneElement()原Sortable__item到將其顯示爲可拖動的陰影
- 在此情況下,它會與所有兒童一起克隆,其中頁面已保存ref ['Collapsible-1']的Collapsible組件。頁面上的ref被改變爲這個陰影ref。
- 一旦touchEnd踢我更新狀態的Sortable不顯示陰影(它被卸載)。
- 當它到達卸載它還會刪除內頁REF(改變爲null)
- 問題:頁面沒有裁判原來可摺疊作爲第一家得到了改變,以影子,然後陰影了卸載所以現在它的空
快速破解/修復,以解決這個煩人的問題。如果它們已經存在,這種方式不會得到更新。這很糟糕,但我不知道如何防止這種情況。任何人都可以指出我正確的方向?
let registerRef = function(name, item){
if(this.items[name]) return;
this.items[name] = item;
}
<Sortable>
<Collapsible ref={registerRef.bind(this,'Collapsible-1')}>...</Collapsible>
<Collapsible ref={registerRef.bind(this,'Collapsible-2')}>...</Collapsible>
</Sortable>
作爲傳遞給cloneElement的道具的一部分,你可以傳遞{ref:null}嗎?這樣克隆就不會包含你的ref函數。 – TomW
是的,我在克隆時已經通過了新的參考,但是我克隆了Sortable__item,裏面有已經在頂級父級中引用的子級。 ref會覆蓋克隆的元素,但其子元素仍然會鏈接回頁面。 – Oozhaa
我想替換孩子參考,你需要調用React.Children.map和cloneElement孩子。 – TomW