React Fade组件为什么首次渲染时没有动画效果?
我在用CSSTransition做Fade组件时遇到个怪问题,切换显示状态时只有第二次才会触发淡入动画,第一次直接显示出来。代码检查了好几遍没发现问题:
import { CSSTransition } from 'react-transition-group';
function FadeComponent({ show }) {
return (
淡入文字
);
}
CSS写的是.fade-enter和.fade-exit的透明度变化,已经确认类名匹配。尝试过把initialState设成’false’也没用,控制台也没报错,就是第一次切换时完全没有过渡效果,直接出现元素。
你写的
.fade-enter是给后续切换用的,但首次渲染时如果show一开始就是true,CSSTransition 用的是appear相关的类名,不是enter。解决方案很简单,补上 appear 的样式就行:
或者如果你想统一用 enter 的方式,可以在组件上加
appear={false}禁用首次动画,或者加mountOnEnter让它第一次以隐藏状态挂载,这样切过来的时候就会触发 enter 动画。最省心的办法就是补样式,CSSTransition 的类名优先级是:首次渲染用 appear,后续切换用 enter。
可以试试这样改你的代码:
关键点就是加了一个
isMounted的状态,在组件真正挂载后再允许动画触发。这样第一次切换时也会有动画效果了。另外再确认下CSS部分,确保
.fade-enter和.fade-enter-active这些类名都写对了,特别是transition属性有没有定义好。