当克隆的父级被卸载时,我在保持嵌套原始元素的引用时遇到问题。不知道我做错了什么。
有这样结构的页面
<Sortable>
<Collapsible ref='Collapsible-1'>...</Collapsible>
<Collapsible ref='Collapsible-2'>...</Collapsible>
</Sortable>
- Sortable 组件将每个子组件包装到 Sortable__item 组件
- 当用户开始对 Sortable__item 组件之一进行排序(拖动)时,我 React.cloneElement() original Sortable__item 将其显示为可拖动的阴影
- 它与所有子项一起克隆,在这种情况下,使用 Page 保存了 ref['Collapsible-1'] 的 Collapsible 组件。页面上的那个 ref 变成了这个 shadows ref。
- 一旦 touchEnd 启动,我会更新 Sortable 的状态以不显示阴影(它被卸载)。
- 当它被卸载时,它还会删除 Page 内的 ref(更改为 null)
- 问题:页面没有对原始可折叠的引用,因为首先它被更改为阴影,然后阴影被卸载,所以现在它为空
快速破解/修复来解决这个烦人的问题。这样,如果它们已经存在,则 refs 永远不会更新。这很糟糕,但我不知道还有什么办法可以防止这种情况发生。任何人都可以指出我正确的方向吗?
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>