gpt4 book ai didi

javascript - ReactJS - ref 返回 "undefined"

转载 作者:行者123 更新时间:2023-11-29 16:33:33 24 4
gpt4 key购买 nike

我将 ReactJS 与 NextJS 结合使用。当我尝试设置 ref 时,我的控制台返回 undefined,这怎么可能?如何解决这个困难?我曾尝试在网上阅读一些命题,但没有成功。

这是我的片段:

 componentDidMount() { 
this.myRef = React.createRef();
window.addEventListener('scroll', this.handleScroll, { passive: true })
}

componentWillUnmount() {
window.removeEventListener('scroll', this.handleScroll)
}

handleScroll(e) {
e.preventDefault();
// let offsetTop = this.myRef.current.offsetTop;

// here I'm trying just a console.log to preview the value
// otherwise my program will just crash
console.log("I'm scrolling, offsetTop: ", this.myRef)
}

render() {
return (
<div className={style.solution_container_layout} >

<div ref={this.myRef} className={style.solution_item}>

任何提示都会很棒,谢谢

最佳答案

createRef 返回的对象的 current 属性是在第一次渲染时设置的,所以如果你在 componentDidMount 之后创建它组件已经渲染,它不会被设置。

您还必须绑定(bind)handleScroll 方法,否则this 将不是您所期望的。

示例

class App extends React.Component {
myRef = React.createRef();

componentDidMount() {
window.addEventListener("scroll", this.handleScroll, { passive: true });
}

componentWillUnmount() {
window.removeEventListener("scroll", this.handleScroll);
}

handleScroll = () => {
console.log("I'm scrolling", this.myRef.current);
};

render() {
return <div ref={this.myRef} style={{ height: 1000 }}> Scroll me </div>;
}
}

ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>

<div id="root"></div>

关于javascript - ReactJS - ref 返回 "undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53461630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com