关于react hooks的一些疑问
let number = 1;
const callback = () => {
console.log('callback', number);
};
class Scroll {
constructor(callback) {
this.callback = callback;
}
}
const scroll = new Scroll(() => console.log(number));
number = 2;
scroll.callback();
demo链接:http://js.jirengu.com/xeninan...
这种情况打印的是2,跟预期是一样的
import React from "react";
import ReactDOM from "react-dom";
class Scroller {
constructor(callback) {
console.log("hehe");
this.callBack = callback;
}
doSomething() {
this.callBack();
}
}
const Demo = (props) => {
const [scroller, setScroller] = React.useState(null);
const onScrollerClick = () => {
scroller.doSomething();
};
React.useEffect(() => {
setScroller(
new Scroller(() => {
const { callback } = props;
callback();
})
);
}, []);
return (
<div>
<button onClick={onScrollerClick}>scroller</button>
</div>
);
};
const Container = () => {
const [count, setCount] = React.useState(1);
const onCountClick = () => {
setCount((preState) => {
const newState = preState + 1;
return newState;
});
};
const callback = () => {
console.log(count);
};
return (
<div>
<button onClick={onCountClick}>{count}</button>
<Demo callback={callback} />
</div>
);
};
class App extends React.Component {
render() {
return <Container />;
}
}
ReactDOM.render(<App />, document.getElementById("container"));
demo链接:https://codesandbox.io/s/reac...
先点击count改变count的值,再点击scroller打印count,发现每次打印的都是初始值。
求解答
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Demo
组件里利用useRef
保存变化的callback
:还有一点:组件
Demo
里没必要使用state
保存scroller
值(因为看本Demo的用法更像是在使用成员变量):只需要重新定义Demo组件
添加useEffect依赖项