社区首页 >问答首页 >重定向后useEffect未清理

重定向后useEffect未清理
EN

Stack Overflow用户
提问于 2020-04-05 16:25:24
回答 1查看 417关注 0票数 0

让我解释一下我一整天都在解决的问题。我有一个网站的标题,这当然有反应路由器链接到其他页面(主页,项目,关于,服务,联系)。在'/projects‘页面和'/’(主页)页面中有一个项目组件。

我想在Project.js组件中制作一个简单的动画,这取决于是否有‘垂直’或没有这个道具。很明显,在‘/ ->’中,我想在滚动页面上做这个动画--在其他页面中则不是。

尝试通过在useEffect中添加if语句来执行此操作,但它不起作用,出现错误'cannot read property‘ref.current.style.transform = `translateY(${window.scrollY * -0.35}px)`;’of null

当我在header i.eg中更改页面时,出现了这个问题。我在“/projects”滚动中,并且动画正常,然后转到“/”,当滚动出现错误时,我已经在上面显示了。

这就像我的if语句不起作用,当我在'/‘哪个项目组件有道具时,vertical={false}在滚动上制作动画,而我不想这样做。

我想要什么?我只想在component有一个类似这样的道具‘垂直’的情况下使用useEffect制作动画:

Project.js组件代码:

代码语言:javascript
代码运行次数:0
复制
const Project = ({ image, className, vertical }) => {
    const ref = useRef(null);
    const [isVertical, setIsVertical] = useState(vertical);
    useEffect(() => {
        console.log('component did mount');
        isVertical
            ? window.addEventListener('scroll', () => {
                  ref.current.style.transform = `translateY(${window.scrollY * -0.35}px)`;
              })
            : console.log('non-vertical');
    }, [isVertical]);

    useEffect(() => {
        return () => console.log('unmount');
    });

    return <StyledProject image={image} className={className} vertical={vertical} ref={ref} />;
};

在home‘/’中:

代码语言:javascript
代码运行次数:0
复制
{images.map(({ image, id }) => (
    <Project key={id} image={image} />
 ))}

在‘/projects’中:

代码语言:javascript
代码运行次数:0
复制
 {images.map(({ image, id }) => (
    <StyledProject vertical image={image} key={id} />
 ))}

当我在路径'/projects‘中并转到另一个路径时出错。这就像是在'/projects‘中保存了所有的语句,但是我想在每个页面上重置useEffect和ref.current

请帮帮我,我不能再往前走了,因为我不能解决这个问题。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-04-05 16:39:15

主要问题是在卸载组件时没有删除事件侦听器。

Here你可以看到一个如何做的例子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61045724

复制
相关文章
react hook useEffect 依赖传入后如何执行?
闭包陷阱产生的原因就是 useEffect 等 hook 里用到了某个 state,但是没有加到 deps 数组里,这样导致 state 变了却没有执行新传入的函数,依然引用的之前的 state。
蓓蕾心晴
2022/09/30
4940
删除Jenkins JOB后清理workspace
如果Jenkins使用的Master-Slave多节点架构,删除Jenkins JOB后,相应JOB的slave节点的workspace不会被删除
donghui
2019/04/19
3.9K0
后渗透阶段清理痕迹方式总结
在渗透完成之后,为了减少被发现和追溯的概率,攻击者有必要清除自己的攻击痕迹,本文分别对windows和linux上清理痕迹的方式做一个总结。
Power7089
2021/04/16
1.3K0
清理reshard后的残留元数据
从12.2.11开始多了一个清理bucket reshard以后的残留元数据命令(reshard stale-instances list|rm)。下面实例讲解具体操作
用户1260683
2019/05/09
1.2K0
Xcode安装失败后的缓存清理
最近手贱,看到了Xcode有更新,就去升级了一下,结果安装失败了,接连试了三次之后,下一次就提示电脑空间不足,我一去看,好家伙,三次安装失败后磁盘多了40G的文件,而且用各种专门清理垃圾文件的程序都没搞定。最后找到了一个终端清理文件的好工具ncdu。
分享者
2022/05/17
1.4K0
Xcode安装失败后的缓存清理
Linux文件后删除空间未释放问题
当系统空间使用量过大需要清理空间或者清理某个文件时,有时会出现执行了删除命令之后磁盘空间并没有释放的情况。很多人首次遇到该情况时会比较困惑,在考虑是不是像windows系统的回收站一样,删除只是逻辑删除到回收站一样?其实不然,linux的回收站功能想了解的可以与我沟通或查资料了解一下,也是个比较实用的方法,此处我们主要实践文件删除后空间未释放问题。
俊才
2020/05/21
7.8K0
关于发版后如何自动清理缓存
提到发版后如何自动清理缓存,大家都普遍都会想到配置nginx设置不缓存然后在配置打包生成hash值即可。但实际上据我本人亲测好像是没有用的(反正我试过不行T T),于是乎便产生了这篇文章。本文基于 vue 2.x 来进行配置。
饼干_
2022/10/05
1.9K0
关于发版后如何自动清理缓存
早读《A Complete Guide to useEffect》
https://overreacted.io/a-complete-guide-to-useeffect/
icepy
2019/12/18
7700
“愚蠢”的useEffect
我有一个需求,需要监听一个window.xxx的变动,并在它变动的时候更新view。
爱吃大橘
2022/12/27
3090
​安全测试笔记《十六》——后渗透-痕迹清理
有时我们登陆到服务器,对它的⽂件进行了修改,修改后的⽂件的时间戳会更新到最新的时间,那么这样就会引起管理员的注意。 因此我们需要吧那个⽂件的时间戳给修改成其他时间。
顾翔
2022/09/23
7020
​安全测试笔记《十六》——后渗透-痕迹清理
Druid 加载 Kafka 数据后查询和清理数据
请访问 query tutorial 页面中的内容来了解如何针对新导入的数据运行一些查询。
HoneyMoose
2021/08/07
5730
Druid 加载 Kafka 数据后查询和清理数据
useEffect与useLayoutEffect
useEffect与useLayoutEffect可以统称为Effect Hook,Effect Hook可以在函数组件中执行副作用操作,副作用是指函数或者表达式的行为依赖于外部环境,或者在这里可以理解为修改了某状态会对其他的状态造成影响,这个影响就是副作用,数据获取,设置订阅以及手动更改React组件中的DOM都属于副作用。
WindRunnerMax
2022/05/06
1.2K0
Artifactory清理未使用的二进制品的最佳实践
Artifactory充分利用了基于Checksum的存储,但是这种机制无法代替常规的工件清理任务。软件开发可能很杂乱,很多时候Artifactory中的许多工件都从未使用过。
JFrog杰蛙科技
2020/03/10
3.6K0
Artifactory清理未使用的二进制品的最佳实践
React-Hooks-useEffect
定义了一个 App 组件,然后在当中用一个按钮来控制 Home 的显示与隐藏,然后呢,点击 Home 组件不同的按钮观察一下生命周期输出到控制台的信息即可。
杨不易呀
2023/10/01
1790
EasyGBS自动清理过期录像的程序未生效是什么原因?
TSINGSEE青犀视频各视频平台一直在不断测试,对功能进行优化。与其他平台一样,EasyGBS也会不断保持更新,将新的需求或功能点添加上的同时,也会对一些新技术进行平台适配度的测试,保持EasyGBS在功能和技术上的先进性。
TSINGSEE青犀视频
2021/10/09
3960
Mybatis 执行后 参数 未拼接到 SQL语句中
本文由 小马哥 创作,采用 知识共享署名4.0 国际许可协议进行许可 本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
IT小马哥
2020/03/18
1.2K0
CleanMyMac X 清理后mysql无法启动解决办法
tail -f /usr/local/mysql/data/mysqld.local.err
前Thoughtworks-杨焱
2021/12/07
1.5K0
React源码中的useEffect
这里不再讲useLayoutEffect,它和useEffect的代码是一样的,区别主要是:
goClient1992
2022/12/02
9880
重点来了,useEffect
当了二十多天废物,今天开始更新,让大家久等了。花了挺长的时间优化文章 UI 细节,进一步提高阅读体验,大家多多感受一下.
用户6901603
2022/05/24
1.1K0
重点来了,useEffect
手写useState与useEffect
useState与useEffect是驱动React hooks运行的基础,useState用于管理状态,useEffect用以处理副作用,通过手写简单的useState与useEffect来理解其运行原理。
WindRunnerMax
2022/05/06
2K0

相似问题

响应useEffect清理

13

获取数据后的reactjs useEffect清理功能

23

react useEffect未清理事件侦听器

248

如何清理useEffect函数?

14

useEffect清理/内存泄漏

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文