reactjs - 在我在 react js 中为 body 设置鼠标移动事件侦听器后,组件一次又一次地渲染
问题描述
我为body写了一个事件监听器来获取react js中的鼠标位置
getMousePosition = (event) => {
if(this.props.navActiveClass === "active-sm"){
var mouseX = 0, mouseY = 0;
this.setState({
mouseX:event.pageX,
mouseY:event.pageY,
})
}
}
componentDidMount(){
document.body.addEventListener('mousemove', this.getMousePosition);
}
componentWillUnmount() {
document.body.removeEventListener('mousemove', this.getMousePosition);
}
之后,每当我移动鼠标时,显示组件就会一次又一次地重新渲染。
解决方案
正如@Mayank 所说,您正在使用 setState 和 on mousemove。this.setState({}) 导致组件重新渲染。您应该将这两个值保持在状态之外。
您可以像这样将它们放入构造函数中
constructor(props) {
super(props);
this.mouseX = 0;
this.mouseY = 0;
}
然后在您的函数中以相同的方式设置它们,只是没有 setState。
getMousePosition = (event) => {
if(this.props.navActiveClass === "active-sm"){
var mouseX = 0, mouseY = 0;
this.mouseX = event.pageX;
this.mouseY = event.pageY;
}
}
推荐阅读
- r - R:了解 ggnetwork 包及其与 ggplot 的用法
- css - How to show an outside website like google or bing within a master page
- javascript - 如果需要输入但未填写,防止本地存储保存?
- node.js - VSCode AWS Sam(node12.x 映像)TypeScript 调试器未到达断点
- spring-boot - 状态:401 在邮递员中未经授权
- docker - 如何将 Ubuntu docker 镜像从 Docker Hub 部署到本地 kubernetes env
- c - 如何删除字符串中的相似词?
- elasticsearch - 在弹性搜索中查找不同的值
- css - CSS 变量 url 后备相对路径在 Safari 中与其他浏览器不同
- java - invalid_grant:AADSTS50126:由于用户名或密码无效,验证凭据时出错