css-transitions - ReactJS 转换 - 为什么这不起作用?

标签 css-transitions reactjs

我想在一个元素更改为另一个元素时对其进行转换。

我有3个例子:

我想要的更像是第二个,这是第一次尝试的一个非常微小的变化。

选项 1:

/** @jsx React.DOM */

var ReactTransitionGroup = React.addons.TransitionGroup;

var TodoList = React.createClass({
  getInitialState: function() {
    return {items: ['hello', 'world', 'click', 'me']};
  },
  handleAdd: function() {
    var newItems =
      this.state.items.concat([prompt('Enter some text')]);
    this.setState({items: newItems});
  },
  handleRemove: function(i) {
    var newItems = this.state.items;
    newItems.splice(i, 1)
    this.setState({items: newItems});
    },

    render: function() {
        var items = this.state.items.map(function(item, i) {
            return (
                <div key={item} onClick={this.handleRemove.bind(this, i)}>
                    {item}
                </div>
            );
        }.bind(this));

        return (
            <div>
                <div><button onClick={this.handleAdd} /></div>
                <ReactTransitionGroup transitionName="example">
                    {items}
                </ReactTransitionGroup>
            </div>
        );
    }
});

var app = React.renderComponent(<TodoList />, document.body);

选项 2: JSX 不起作用,但更接近我想做的事情(真的,隐藏一个 View ,显示另一个 View )

/** @jsx React.DOM */

var ReactTransitionGroup = React.addons.TransitionGroup;

var Test = React.createClass({
  getInitialState: function() {
    return {showOne:true}
  },
  onClick: function() {
    this.setState({showOne:! this.state.showOne});
  },
    render: function() {
      var result;
      if (this.state.showOne)
      {
        result = <div ref="a">One</div>
      }
      else 
      {
        result = <div ref="a">Two</div>
      }

        return (
            <div>
                <div><button onClick={this.onClick}>switch state</button></div>
                <ReactTransitionGroup transitionName="example">
                    {result}
                </ReactTransitionGroup>
            </div>
        );
    }
});

var app = React.renderComponent(<Test />, document.body);

选项 3: 使用隐藏/显示来保留 2 个 View ,但仍然不起作用。

/** @jsx React.DOM */

var ReactTransitionGroup = React.addons.TransitionGroup;

var Test = React.createClass({
  getInitialState: function() {
    return {showOne:true}
  },
  onClick: function() {
    this.setState({showOne:! this.state.showOne});
  },
    render: function() {
      var result;
      var c1 = this.state.showOne ? "hide" : "show";
      var c2 = this.state.showOne ? "show" : "hide";


      return (
            <div>
                <div><button onClick={this.onClick}>switch state</button></div>
                <ReactTransitionGroup transitionName="example">
        <div className={c1}>One</div>
        <div className={c2}>Two</div>
                </ReactTransitionGroup>
            </div>
        );
    }
});

var app = React.renderComponent(<Test />, document.body);

长话短说 - 如何在从一个主要“组件”切换到另一个主要“组件”时执行转换?我不明白为什么选项 1 有效,但选项 2 不起作用!

最佳答案

React 只是更改 DOM 的内容,因为这就是所有更改的内容。为元素提供唯一的键以使它们具有动画效果。

  if (this.state.showOne)
  {
    result = <div key="one">One</div>
  }
  else 
  {
    result = <div key="two">Two</div>
  }

JSFiddle

关于css-transitions - ReactJS 转换 - 为什么这不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24006368/

相关文章:

reactjs - 为什么 IE8 使用 Facebook 的 React.js 时会出现脚本错误

带有 calc() 的 CSS 转换在 IE10+ 中不起作用

css - 添加另一个对现有图像叠加悬停效果有影响的形状

CSS 缩放文本使其模糊,如何使其看起来正常?

javascript - 当我拖动一个用css旋转过的图像时,它会以非旋转方式拖动(原始)?

javascript - Testcafe LocalStorage 的问题

javascript - 使用响应式容器重新绘制饼图居中

reactjs - react 路由器在改变路线之前不等待动画

css - CSS 显示属性的过渡

html - 要显示在内容 slider 中的页面