如何在渲染时为 React 组件设置动画?

How to animate a React component on render?

我正在尝试为包含从其他地方获取的数据的 React 组件制作动画。将它放在 ReactCSSTransitionGroup 中效果很好。也就是说,直到我将组件的 render() 方法更改为 return false 直到数据被获取(到 prevent it from being rendered without data)。

现在,我想组件会立即安装,此时会添加动画 类,但只会在之后渲染。这种想法对吗?当 render return 是实际组件时,如何让组件动画化?

ReactCSSTransitionGroup 在其 props.children 中添加和删除组件时激活。由于您的组件在获取数据之前已安装,因此在获取数据后不会发生任何事情(我认为即使组件的 render() 方法 returns false 也是如此。如果不正确,请在评论中告诉我)

Here's a solution

只是不要挂载组件(在解决方案中,它是一个 <div key="1"> 标签)直到反应 class 收到数据。在 parent 组件上使用组件状态来跟踪异步请求的状态。

ReactCSSTransitionGroup 不能很好地处理表格,因为它的默认行为是用 span 元素包装标签。你可以用你自己的组件来提供它,但我发现解决方案非常繁重和复杂。

我有一个 different approach 允许 React 组件在每次内容更改时进行动画处理。通过在 2 个重复 CSS 样式之间切换不断触发动画。

除了 ReactCSSTransitionGroup,另一种方法是编写您自己的 css 转换,并在 componentdidmount 中添加到组件的 'enter' class。请记住,您应该更改 requestAnimationFrame 中的状态,否则您的 class 将在安装时添加到同一事件循环中,因此不会设置动画。这是一个例子: https://codesandbox.io/s/zkm5015y1x

另外,关于事件循环的更多信息,Jake Archibald 的演讲: https://www.youtube.com/watch?v=cCOL7MC4Pl0