我将类组件更改为功能组件,并使用钩子和useEffect,这样我的应用程序就会变得缓慢并崩溃,而没有任何错误
import React, { useState, useEffect } from 'react';
import Toolbar from '@material-ui/core/Toolbar';
const FancyToolBar = ({ children }) => {
const [backGround, togglebackGround] = useState('white');
const listenScrollEvent = () => {
if (window.scrollY > 80) {
togglebackGround('black');
} else {
togglebackGround('white');
}
};
useEffect(() => {
window.addEventListener('scroll', listenScrollEvent);
});
const logo = backGround === 'white'
? <img src="/images/1.jpg" alt="" style={{ width: '50px !important', height: '50px' }} />
: <img src="/images/2.png" alt="" style={{ width: '50px !important', height: '50px' }} />;
return (
<Toolbar style={{ backgroundColor: backGround }}>
{logo}
{children}
</Toolbar>
);
};
export default FancyToolBar;
答案 0 :(得分:2)
您需要解决两件事。
首先:您需要清理eventListener
。
第二:仅在初始安装时通过将[]
添加为useEffect的第二个参数来添加事件监听器
useEffect(() => {
window.addEventListener('scroll', listenScrollEvent);
return () => {
window.removeEventListener('scroll', listenScrollEvent);
}
}, []);
答案 1 :(得分:0)
对不起,我只是忘了添加清理效果