useEffect重定向后未清理



让我解释一下我一整天都在解决的问题。我有一个带有标题的网站,它当然有通过反应路由器链接到其他页面(主页、项目、关于、服务、联系人(。在"/projects"页面和"/"(主页(中有一个Project组件。

我想在Project.js组件中制作一个简单的动画,这取决于是否有"垂直"道具。显然->在"/projects"中,我想在滚动上做动画,而不是在其他页面上。

尝试通过在useEffect中添加if语句来完成此操作,但它不起作用,给我一个错误"无法读取nullref.current.style.transform = `translateY(${window.scrollY * -0.35}px)`;的属性"style">

当我在页眉中更改页面时,这个问题就会出现。例如,我在"/projects"滚动中,动画正常工作,然后转到"/",当滚动出现错误时,我在上面显示了。

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

我想要什么?我想使用useEffect制作动画,前提是组件有一个道具"垂直",如下所示:

Project.js组件代码:

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} />;
};

在家"/":

{images.map(({ image, id }) => (
<Project key={id} image={image} />
))}

在"/个项目"中:

{images.map(({ image, id }) => (
<StyledProject vertical image={image} key={id} />
))}

当我在路径"/projects"中并转到另一个路径时出错。这就像在"/projects"中保存所有语句一样,但我希望在每一页上重置useEffect和ref.current

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

提前谢谢。

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

在这里你可以看到一个如何做到这一点的例子

相关内容

  • 没有找到相关文章

最新更新