首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件渲染与ReactCSSTransitionGroup动画

条件渲染与ReactCSSTransitionGroup动画
EN

Stack Overflow用户
提问于 2017-10-24 16:59:17
回答 2查看 9.6K关注 0票数 6

我制作了一个小应用程序,它基于Redux状态呈现不同的组件。当其中一个组件呈现时,我想应用一个“淡出”动画。但是,出于某种原因,它对我不起作用。到目前为止,我的情况如下:

content.js

代码语言:javascript
复制
class Content extends Component {
  render() {
    const transitionOptions = {
      transitionName: "fade",
      transitionEnterTimeout: 500,
      transitionLeaveTimeout: 500
    }

    if (this.props.page === 'one') {
      return (
        <div>
          <ReactCSSTransitionGroup {...transitionOptions}>
            <Comp1/>
          </ReactCSSTransitionGroup>
        </div>
      );
    } else {
      return (
        <div>
          <ReactCSSTransitionGroup {...transitionOptions}>
            <Copm2/>   
          </ReactCSSTransitionGroup>
        </div>
      );
    } 
  }
}

style.css

代码语言:javascript
复制
.fade-enter {
  opacity: 0.01;
}

.fade-enter-active {
  opacity: 1;
  transition: opacity 500ms ease-in;
}

.fade-leave {
  opacity: 1;
}

.fade-leave.fade-leave-active {
  opacity: 0.01;
  transition: opacity 300ms ease-in;
}

我看到ReactCSSTransitionGroup用于添加项并将其移除到列表中,但我还没有找到一个用于条件呈现的示例。这能实现吗?也许还有另外一句话能起这个作用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-24 18:35:12

我见过同样的问题贴了很多次了。简而言之:您需要在<ReactCSSTransitionGroup>中有条件地呈现子元素,而不是<ReactCSSTransitionGroup>本身。<ReactCSSTransitionGroup>需要挂载一次,然后保持不变,被添加和删除的是子级。

content.js

代码语言:javascript
复制
class Content extends Component {
  render() {
    const transitionOptions = {
      transitionName: "fade",
      transitionEnterTimeout: 500,
      transitionLeaveTimeout: 500
    }

    let theChild = undefined;
    if (this.props.page === 'one') {
        theChild = <Comp1 key="comp1" />;
    } else {
        theChild = <Comp2 key="comp2" />;
    } 

    return (
        <div>
          <ReactCSSTransitionGroup {...transitionOptions}>
            {theChild}
          </ReactCSSTransitionGroup>
        </div>
    );
  }
}

请注意,您还应该向一个key内部的每个子级添加一个唯一的<ReactCSSTransitionGroup>支柱。这有助于组件识别哪些子组件是唯一的,以便正确地使它们在内外动画。

票数 7
EN

Stack Overflow用户

发布于 2017-10-24 18:36:56

下面是我的代码片段

代码语言:javascript
复制
render() {       
    return (
            <CSSTransitionGroup
                transitionName="slide"
                transitionEnterTimeout={500}
                transitionLeaveTimeout={500}
            >
            { id === targetID ? (

                <div>
                    <SectionList id={id} />
                </div>

            ) : '' }
            </CSSTransitionGroup>
     )
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46916118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档