javascript - React 组件和 CSSTransitionGroup

标签 javascript css reactjs

早期使用 Facebook ReactJS。简单的 CSS 淡入过渡。它与 ReactJS v0.5.1 一起按预期工作。它不适用于 v11.1、v12.0、v12.1。这是 CSS 和 JSX:

CSS

.example-enter {
  opacity: 0.01;
  transition: opacity .5s ease-in;
}

.example-enter.example-enter-active {
  opacity: 1;
}

.example-leave {
  opacity: 1;
  transition: opacity .5s ease-in;
}

.example-leave.example-leave-active {
  opacity: 0.01;
}

ReactJS v12.1 的 JSX

/**@jsx React.DOM*/

var ReactTransitionGroup = React.addons.CSSTransitionGroup;

var HelloWorld = React.createClass({
  render: function() {
    return (
      <ReactTransitionGroup transitionName="example">
          <h1>Hello world</h1>      
      </ReactTransitionGroup>
    );
  }
});

React.render(<HelloWorld />, document.body);

这是 Codepens 的列表:

感谢任何帮助。

干杯, 卢卡

最佳答案

看起来像CSSTransitionGroup用于在初始挂载时设置动画,但从 React v0.8.0 左右开始不再使用。参见 https://github.com/facebook/react/issues/1304了解更多信息。

一个解决方案是简单地挂载 <h1><HelloWorld> 之后已安装,如下所示:

/**@jsx React.DOM*/

var ReactTransitionGroup = React.addons.CSSTransitionGroup;

var HelloWorld = React.createClass({
  getInitialState: function() {
    return { mounted: false };
  },
  componentDidMount: function() {
    this.setState({ mounted: true });
  },
  render: function() {
    var child = this.state.mounted ?
      <h1>Hello world</h1> :
      null;

    return (
      <ReactTransitionGroup transitionName="example">
        {child}
      </ReactTransitionGroup>
    );
  }
});

React.render(<HelloWorld />, document.body);

实例:http://codepen.io/peterjmag/pen/wBMRPX

请注意 CSSTransitionGroup用于在动态添加、删除和替换子组件时转换子组件,不一定用于在初始渲染时对它们进行动画处理。玩转 this TodoList Codepen (改编自 this example in the React docs )看看我的意思。列表项在添加和删除时会淡入和淡出,但它们不会在初始渲染时淡入。

编辑:最近引入了一个新的“出现”过渡阶段,以实现安装时的动画效果。参见 https://github.com/facebook/react/pull/2512了解详情。 (该提交已经合并到 master 中,所以我想它将与 v0.12.2 一起发布。)理论上,您可以执行类似这样的操作来生成 <h1>。在坐骑上淡入:

JS

...
<ReactTransitionGroup transitionName="example" transitionAppear={true}>
    <h1>Hello world</h1>
</ReactTransitionGroup>
...

CSS

.example-appear {
  opacity: 0.01;
  transition: opacity .5s ease-in;
}

.example-appear.example-appear-active {
  opacity: 1;
}

关于javascript - React 组件和 CSSTransitionGroup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27385184/

相关文章:

javascript - 在鼠标悬停/输入时将图像 src 和位置设置为鼠标

javascript - 排除 JavaScript 正则表达式匹配的部分内容

jQuery .css() 函数不适用于变量

android - React-Native ,抽屉导航器(React-Navigation)中的项目在某些设备上不完全可见

reactjs - 尽管调用了函数,<ErrorMessage/> 仍不起作用

javascript - 是否可以将删除/放置请求发送到 Azure AD 安全 api 或使用 aadHttpClientFactory 以字符串形式获取 jwt token

javascript - Highcharts 中的最大值系列

css - moz-column 在 firefox 中不工作

javascript - JS/CSS Combo - 获得 3D 图像环绕效果

javascript - 如何使Modal的页眉和页脚固定,同时允许Modal内容单独滚动?