我正在编写一个组件,该组件state
根据ref
其子对象处理一些内部事件(例如,与该子对象的ref相关的鼠标事件)。
该组件使用a render-prop
传递相关state
子对象的子元素,并ref
通过React.cloneElement
util 渲染带有附加子元素的子元素。
问题是,当子级是一个class
组件时,由于某种原因该子级ref
不可用,并且由于它是一种类型为react element的对象function
(我当然也将其克隆),因此我找不到一种渲染方法。
但是,如果子DOM
节点只是一个像a这样的节点div
,则它按预期运行。
我的解决方法是检查子类型,如果是子类型,function
则将克隆的元素包装成自己的子类型div
,如果只是dom节点,则照原样渲染。
但是,我不想用多余的东西包裹孩子,div
因为我不想添加不必要的DOM
节点。
这是一个基本的代码示例,为简洁起见,删除了大多数代码:
Parent组件:
class Parent extends Component {
attachRef = node => {
this.ref = node;
}
render() {
const { render } = this.props;
const { someValue } = this.state;
const Child = render(someValue);
const WithRef = React.cloneElement(Child, {
ref: this.attachRef
}); …
Run Code Online (Sandbox Code Playgroud)