无法让CSSTransitionGroup
使用我的自定义组件。
以下是代码:
import {CSSTransitionGroup} from 'react-transition-group'
...
// in render():
<CSSTransitionGroup
transitionName='container'
transitionEnterTimeout={500}
transitionLeaveTimeout={300}
>
<MyComponent />
</CSSTransitionGroup>
我看到CSSTransitionGroup
已添加span
我的组件,但没有类。 MyComponent
render()方法返回null
或<div />
(如果window.innerWidth < 960
)。所以我可以看到内容消失并在窗口调整大小时显示,但没有来自CSSTransitionGroup
的类。
请帮忙
答案 0 :(得分:2)
CSSTransitionGroup在从组件树安装或卸载子组件时管理其子组件的动画。由于控制MyComponent
内容的逻辑是该组件的 ,因此CSSTransitionGroup无法查看它并且不会对其进行管理,因为<MyComponent />
已安装并保持挂载状态。
要使CSSTransitionGroup以您希望的方式工作,您需要将其放在MyComponent
内,以便它管理您要设置动画的<div />
,或者您需要直接挂载和卸载{ {1}}。
换句话说,您希望CSSTransitionGroup控制的元素/组件需要是CSSTransitionGroup组件的 direct children ,并在其中安装和卸载,否则它将无法工作。
答案 1 :(得分:0)
也许 React-Anime-Manager 会更适合您
import {useAnimeManager} from '@perymimon/react-anime-manager'
import {useState} from "react";
function ShowHide() {
const [show, setShow] = useState(true);
const {item: flag, phase, done} = useAnimeManager(show, {oneAtATime: true});
useEffect(_ => {
setTimeout(_ => setShow(false) , 500)
}, [show])
/**-> because there is no element when flag == false. `done` must called expliclty to guide `useAnimeManager` continue with the states flow and show the `true` value when it arrive */
if (!flag) done()
return flag && <MyComponent className="container" />
}