使用React.findDOMNodev0.13.0中引入的方法,我能够通过映射获取传递给父组件的每个子组件的DOM节点this.props.children.
但是,如果某些孩子恰好是React Elements而不是Components(例如,其中一个孩子是<div>通过JSX创建的),React会抛出一个不变的违规错误.
有没有办法在挂载后获取每个子节点的正确DOM节点,而不管子节点是什么类?
Ale*_*erg 53
this.props.children 应该是ReactElement或ReactElement数组,而不是组件.
要获取children元素的DOM节点,您需要克隆它们并为它们分配新的ref.
render() {
return (
<div>
{React.Children.map(this.props.children, (element, idx) => {
return React.cloneElement(element, { ref: idx });
})}
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过访问子组件this.refs[childIdx],并通过它检索其DOM节点ReactDOM.findDOMNode(this.refs[childIdx]).
adn*_*ili 18
如果要访问任何DOM元素,只需添加ref属性即可直接访问该元素.
<input type="text" ref="myinput">
Run Code Online (Sandbox Code Playgroud)
然后你可以直接:
componentDidMount: function()
{
this.refs.myinput.select();
},
Run Code Online (Sandbox Code Playgroud)
ReactDOM.findDOMNode()如果您已添加ref任何元素,则无需使用它们.
React.findDOMNode(this.refs.myExample) 在另一个答案中提到的已被弃用。
使用ReactDOM.findDOMNode来自'react-dom'代替
import ReactDOM from 'react-dom'
let myExample = ReactDOM.findDOMNode(this.refs.myExample)
Run Code Online (Sandbox Code Playgroud)
您可以使用新的React ref api进行此操作。
function ChildComponent({childRef}) {
returns (<div ref={childRef} />)
}
class Parent extends Component {
myRef = React.createRef()
get doSomethingWithChildRef() {
console.log(this.myRef) // Will access child DOM node.
}
render() {
<ChildComponent childRef={this.myRef}>
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99351 次 |
| 最近记录: |