【发布时间】:2017-07-23 13:40:16
【问题描述】:
React.cloneElement() 几乎等同于:
<element.type {...element.props} {...props}>{children}</element.type>但是,它也保留了 refs。这意味着如果你得到一个带有 ref 的孩子,你不会不小心从你的祖先那里偷走它。您将获得附加到新元素的相同 ref。
所以我做了这个小例子:
import React, { Component, Children, cloneElement } from 'react';
class Wrapper extends Component {
render() {
return cloneElement(Children.only(this.props.children), {
ref: (ref) => {
console.log("wrapper", ref);
},
});
}
}
const MyComponent = () =>
<Wrapper>
<div ref={ref => {
console.log("original", ref);
}}>
My content
</div>
</Wrapper>
export default MyComponent;
(小提琴:https://jsfiddle.net/pxho45um/)
我认为渲染MyComponent 会同时记录"wrapper" <div>...</div> 和"original" <div>...</div>,但似乎只调用了包装器引用回调。
这不是与文档相反吗?或者当 React 团队说“如果你得到一个带有 ref 的孩子,你就不会不小心从你的祖先那里偷走它”是什么意思?
【问题讨论】:
标签: reactjs