javascript - 如何将它变成 React Hooks for useEffect()?
问题描述
我想用它把它变成反应钩子,useEffect
但它一直给我一个错误。当我使用useEffect
.
componentDidMount() {
window.addEventListener("scroll", () => {
const isTop = window.scrollY < 100;
const img = document.getElementById("logo-img");
const name = document.getElementById("name");
if (isTop) {
img.classList.remove("logo-small");
name.classList.remove("no-display");
} else {
img.classList.add("logo-small");
name.classList.add("no-display");
}
});
}
componentWillUnmount() {
window.removeEventListener("scroll");
}
这就是我将它转换为反应钩子的东西useEffect
,当我实现这个时,类名不会被删除或添加
useEffect(() => {
window.scrollTo(0, 0);
window.addEventListener("scroll", () => {
const isTop = window.scrollY < 100;
const img = document.getElementById("logo-img");
const name = document.getElementById("name");
if (isTop) {
img.classList.remove("logo-small");
name.classList.remove("no-display");
} else {
img.classList.add("logo-small");
name.classList.add("no-display");
}
});
}, []);
解决方案
useLayoutEffect
根据文档,您可以尝试使用:
小费
如果您正在从类组件迁移代码,则 note在与和
useLayoutEffect
相同的阶段触发。但是,我们建议先开始,并且仅在导致问题时才尝试。componentDidMount
componentDidUpdate
useEffect
useLayoutEffect
推荐阅读
- sql-server - sql查询PIVOT
- u-boot - 通过 uboot 将文件从 emmc 复制到 tftp-server
- java - 为什么线程通信在java中不起作用?
- java - 使用 servlet 将图像路径插入数据库
- pvlib - 如何在 pvlib 中包含因光伏面板寿命退化而导致的损失
- facebook - og:image 在 Facebook 缓存中保留多长时间?
- github - 如何以 TeamCity 内部版本号格式使用 Git 提交计数
- oracle - REP-52266:进程内报告服务器 rep_daniyal_tariq 无法启动.oracle.reports.RWException
- python - 如何使用子进程模块在 python 中运行 aws cli 命令
- android - 如何将数据从微调器插入到 Firebase?