React组件卸载时,Tailwind自定义动画及CSS是否需手动移除?
问题
我在用Tailwind CSS,已经在tailwind.config.cjs里自定义了changeBgDark、changeBgLight两个动画,并且在Login组件里用上了。用户登录后会跳转到首页,这时候Login组件会被卸载,我不确定要不要通过useEffect手动移除组件上的动画,还是它会自动停止?另外,组件卸载的时候,所有应用的CSS会不会自动移除?
我的tailwind.config.cjs配置如下:
module.exports = { content: [ "./index.html", "./src/**/*.{js,ts,jsx,tsx}", ], darkMode: "class", theme: { extend: { keyframes: { changeBgDark: { "0%, 100%": { "background-image": "linear-gradient(to left, #4c1d95,#0284c7,blue)", "background-size":"200%", "background-position":"right" }, "50%": { "background-image": "linear-gradient(to right,blue,#0284c7,#4c1d95)", "background-size":"200%", "background-position":"left" }, }, changeBgLight: { "0%, 100%": { "background-image": "linear-gradient(to left, #6d28d9,#0d9488,#06b6d4)", "background-size":"200%", "background-position":"right" }, "50%": { "background-image": "linear-gradient(to right,#06b6d4,#0d9488,#6d28d9)", "background-size":"200%", "background-position":"left" }, } }, animation: { changeBgLight: "changeBgLight 5s ease-in-out infinite", changeBgDark: "changeBgDark 5s ease-in-out infinite" }, }, }, plugins: [], };
解答
- 不需要手动移除动画:当Login组件卸载时,对应的DOM元素会被从页面中移除,绑定在该元素上的动画会自动停止,根本不需要用
useEffect去手动清理。动画是依附于DOM元素存在的,元素没了,动画自然就消失了。 - 组件卸载不会自动移除全局CSS:Tailwind的自定义动画类(比如
animate-changeBgDark)是在构建阶段根据content配置扫描所有文件后,生成的全局CSS样式,这些样式会一直存在于最终打包的CSS文件中,不会因为某个组件卸载就被移除。不过这完全不用担心,因为组件卸载后没有元素再使用这些类,不会对页面造成任何影响。如果是组件内的内联样式或者动态添加的临时样式,随着DOM元素的移除,它们的作用对象消失,也不会再产生作用,但全局CSS类本身还是保留的。
内容的提问来源于stack exchange,提问作者Max Vhanamane
相关产品推荐
相关产品推荐

