使用 react-transition-group 作为子组件接收新的道具

Posted

技术标签:

【中文标题】使用 react-transition-group 作为子组件接收新的道具【英文标题】:use react-transition-group as child component receives new props 【发布时间】:2020-07-19 12:01:06 【问题描述】:

我有一个子组件,我想在其中使用 slide-out 动画,因为新的道具正在传递给它,我尝试使用 react-transition-group/switch-transition 但不太清楚如何使用它

子组件渲染方法如下所示

return (
  <SwitchTransition mode="out-in">
    <CSSTransition
      classNames="slide"
    >
      <div className=classnames("fields-group", containerClass)>
        /* <pre>JSON.stringify(this.props.fields, null, 2)</pre>*/

        fields
      </div>
    </CSSTransition>
  </SwitchTransition>
);

【问题讨论】:

【参考方案1】:

还有更多事情要做:

    CSSTransition 应该有一个 prop key。更改后,过渡将生效。 你需要自己添加过渡样式,因为React Transition Group is not an animation library like React-Motion, it does not animate styles by itself. reference

所以子组件看起来像这样:

function Child( propToAnimate ) 
  return (
    <>
      <h4>Child Component</h4>
      <div className="main">
        <SwitchTransition mode="out-in">
          <CSSTransition
            key=propToAnimate
            addEndListener=(node, done) => 
              node.addEventListener("transitionend", done, false);
            
            classNames="fade"
          >
            <div className="button-container">
              <div className="animate">
                <pre>state: propToAnimate</pre>
              </div>
            </div>
          </CSSTransition>
        </SwitchTransition>
      </div>
    </>
  );

以及样式(例如幻灯片动画):

.fade-enter .animate 
  opacity: 0;
  transform: translateX(-100%);

.fade-enter-active .animate 
  opacity: 1;
  transform: translateX(0%);

.fade-exit .animate 
  opacity: 1;
  transform: translateX(0%);

.fade-exit-active .animate 
  opacity: 0;
  transform: translateX(100%);

.fade-enter-active .animate,
.fade-exit-active .animate 
  transition: opacity 500ms, transform 500ms;

https://codesandbox.io/s/switchtransition-child-component-dk4jo

【讨论】:

非常感谢您的精彩解释!

以上是关于使用 react-transition-group 作为子组件接收新的道具的主要内容,如果未能解决你的问题,请参考以下文章

元素值在使用 react-transition-group 进行转换之前移动和更改

react-transition-group 中的退出延迟动画

使用 React,在使用 react-transition-group 时,在 StrictMode 中不推荐使用 findDOMNode 作为警告

使用 ReactDOM createPortal 为 react-transition-group 设置动画

如何使用 React-Transition-Group 显示和隐藏带有动画的模态/对话框?

react-transition-group动画以及数字滚动效果实现