複製された親がアンマウントされる間、ネストされた元の要素の参照を保持するのに問題があります。私が間違っているのかわかりません。
このような構造のページを持っています
<Sortable>
<Collapsible ref='Collapsible-1'>...</Collapsible>
<Collapsible ref='Collapsible-2'>...</Collapsible>
</Sortable>
- Sortable コンポーネントは、各子を Sortable__item コンポーネントにラップします
- ユーザーが Sortable__item コンポーネントの 1 つをソート (ドラッグ) し始めると、元の Sortable__item を React.cloneElement() してドラッグ可能なシャドウとして表示します
- このシナリオでは、Page が ref['Collapsible-1'] を保存した Collapsible コンポーネントを使用して、すべての子で複製されます。ページ上のその参照は、このシャドウ参照に変更されます。
- touchEnd が起動したら、Sortable の状態を更新してシャドウを表示しないようにします (アンマウントされます)。
- アンマウントされると、ページ内の参照も削除されます(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>