我正面临一个导致很多头痛的问题,但我无法解决它。我有一个在整个应用程序中使用的组件(总共大约 100 次),它的主要目标是根据子级(子级是返回子组件的函数)和有效负载(有效负载是对象,其中包含有关未来孩子的信息)。
<GenericList
children={this.renderElement}
payload={this.state.treeData}
// other props...
/>
这里是renderElement
renderElement = (role) => {
return (
<BaseListItem>
<div className="fb jCenter">
<Text
title={role.Name}
>
{role.Name}
</Text>
</div>
</BaseListItem>
);
};
renderElement
都可以返回 RFC 或 RCC。在里面GenericList
我应该以某种方式管理它以传递ref
给 RFC 或 RCC。实现该逻辑的代码部分是
cloneChildrenElement({ payload, children, selected, payloadSortBy }) {
if (payload && payload.length) {
const { selectBy, scrollToIndex, idToScrollIndex } = this.props;
const data = sortPayload(payload, payloadSortBy);
return data.map((item, index) => {
return cloneElement(children(item), {
item,
isActive,
key: index,
onDoubleClick: this.handleDblClick,
ref: (node) => {
console.log(node, 'node');
if (Number.isInteger(scrollToIndex) || isActive) {
this.genericContentSelected = node;
}
},
});
});
}
return false;
}
我也尝试过实现 ref 转发,但在这种情况下,我应该为所有使用该逻辑的组件手动执行此操作。我想知道是否可以通过仅在GenericList
组件内部进行更改来实现这一点。