Foo
是包装Bar
的高阶组件。我希望Foo
获取对呈现的Bar
元素的引用。
import React from 'react';
export default (Bar) => {
return class Foo extends React.Component {
componentDidMount = () => {
// How to obtain reference to the element that Bar renders to?
}
render() {
return <Bar {... this.props} />;
}
}
};
尝试使用ref
获取对呈现元素的引用,解析为对象,该对象是Bar
的实例,而不是元素本身:
import React from 'react';
export default (Bar) => {
return class Foo extends React.Component {
componentDidMount = () => {
console.log(this.refs.subject instanceof Bar);
}
render() {
return <Bar ref='subject' {... this.props} />;
}
}
};
答案 0 :(得分:5)
使用findDOMNode
:
我认为由于this.refs.bar
是Bar
的一个实例,我可以使用findDOMNode
来获取对渲染元素的引用。
import React from 'react';
import ReactDOM from 'react-dom';
export default (Bar) => {
return class Foo extends React.Component {
componentDidMount = () => {
console.log(ReactDOM.findDOMNode(this.refs.bar));
};
render() {
return <Bar ref='bar' {... this.props} />;
}
}
};
上一个回答:
我设法获得对渲染组件元素的引用的唯一方法是:
Bar
包裹在ReactElement
。ReactElement
。import React from 'react';
export default (Bar) => {
return class Foo extends React.Component {
componentDidMount = () => {
console.log(this.refs.bar.firstChild);
};
render() {
return <div ref='bar'>
<Bar {... this.props} />
</div>;
}
}
};
答案 1 :(得分:0)
我怀疑您正在获取Bar实例,因为您正在使用箭头函数语法,该语法从您声明它的上下文继承 $('#box').on("click",function(){
clicked=clicked+1;
ch=clicked%2; // remove `var`
alert('ch'+ch);
});
。请尝试使用常规函数语法:
this
答案 2 :(得分:0)
要访问React中的HTML元素,您可以使用findDOMNode
方法,如下所示:
import ReactDOM from 'react-dom';
export default (Bar) => {
return class Foo extends React.Component {
componentDidMount() {
const subjectEl = ReactDOM.findDOMNode(this.refs.subject);
}
render() {
return <Bar ref='subject' {... this.props} />;
}
}
};