Html 反应如何包装组件';身高是多少?
有没有办法获得包装组件的DOM高度 我尝试添加ref,但控制台错误meHtml 反应如何包装组件';身高是多少?,html,reactjs,dom,react-ref,Html,Reactjs,Dom,React Ref,有没有办法获得包装组件的DOM高度 我尝试添加ref,但控制台错误me无法为功能组件提供ref。 我设定了目标,但似乎不是这样 export default function withInfiniteScroll(Component) { return class extends React.Component { componentDidMount() { window.addEventListener('scroll', this.onScroll, true);
无法为功能组件提供ref。
我设定了目标,但似乎不是这样
export default function withInfiniteScroll(Component) {
return class extends React.Component {
componentDidMount() {
window.addEventListener('scroll', this.onScroll, true);
}
onScroll = () => {
// here
console.log(
'window.innerHeightWrapped component should either expose a ref to underlying DOM element with forwardRef
:
function withInfiniteScroll(Component) {
return class extends React.Component {
ref = React.createRef();
componentDidMount() {
window.addEventListener('scroll', this.onScroll, true);
}
onScroll = () => {
console.log(this.ref.current.clientHeight);
}
render() {
return <Component ref={this.ref} {...this.props} />;
}
};
}
const Foo = React.forwardRef((props, ref) => (
<div ref={ref}>Foo</div>
));
const FooWithScroll = withInfiniteScroll(Foo);
导出带有无限滚动(组件)的默认函数{
返回类扩展了React.Component{
componentDidMount(){
window.addEventListener('scroll',this.onScroll,true);
}
onScroll=()=>{
//这里
console.log(
'window.innerHeight包装的组件应该使用forwardRef
向底层DOM元素公开一个ref:
function withInfiniteScroll(Component) {
return class extends React.Component {
// ...same as above
render() {
return <div ref={this.ref}><Component {...this.props} /></div>
}
};
}
具有无限滚动(组件)的函数{
返回类扩展了React.Component{
ref=React.createRef();
componentDidMount(){
window.addEventListener('scroll',this.onScroll,true);
}
onScroll=()=>{
console.log(this.ref.current.clientHeight);
}
render(){
返回;
}
};
}
const Foo=React.forwardRef((props,ref)=>(
福
));
常数FooWithScroll=无限滚动(Foo);
或包装器组件应添加容器DOM元素:
具有无限滚动(组件)的函数{
返回类扩展了React.Component{
//……同上
render(){
返回
}
};
}
我设置了正向参考,但似乎不是这样-如何设置?不,就是这样。请提供。@estus Hi,在HOC中我创建了正向参考,但我如何在HOC中使用它?我认为这就是重点。和其他参考一样,我将提供一个示例。是的,谢谢。我认为第二个解决方案将混合样式,所以需要更好地考虑使用它。也很抱歉,我尝试添加了一个ref,但控制台出现了错误,因为我将“主容器”设置为函数组件。将其更改为类将起作用:const innterDom=ReactDOM.findDOMNode(this.innterdcomponentref.current)
如果样式设置有问题,例如
,您可以接受具有相应样式/类的自定义容器元素作为支撑。不鼓励使用findDOMNode
,也要求组件成为类,但并非总是可能的。子组件应该知道它需要公开一个ref。这就是forwardRef
的作用在本例中。如果不总是可行或实用,请在包装好的组件周围使用容器。