ある要素が別の要素に変化するときに、その要素を移行したいと思います。
私は3つの例を持っています:
- 機能しますが、保管されているアイテムのリストを使用します(jsfiddle)
- 状態に応じて、機能せず、1 つのアイテムのみを保持するもの (jsfiddle)
- 両方のアイテムを保持し、それらを非表示/表示する、機能しない別のもの(非表示/表示を使用するjsfiddle)
私が望むのは、2 番目のもののようなものです。これは、機能する最初の試みの非常にわずかなバリエーションです。
オプション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 (実際には、1 つのビューを非表示にし、別のビューを表示する)
/** @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 つのビューを保持しますが、それでも機能しません。
/** @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 は機能しません。