|
var Transition = React.addons.TransitionGroup; |
|
|
|
var Colors = { |
|
white: '#fff', |
|
dark: '#444', |
|
blue: '#09c' |
|
}; |
|
var Lang = { |
|
toggle_item: 'Toggle Item' |
|
}; |
|
|
|
var App = React.createClass({displayName: "App", |
|
getInitialState: function() { |
|
return { |
|
item: true |
|
}; |
|
}, |
|
// _addItem: function () { |
|
// var now = moment().format('x').substring(7); |
|
// this.setState({list: this.state.list.concat(now)}); |
|
// }, |
|
_toggleItem: function () { |
|
this.setState({item: !this.state.item}); |
|
}, |
|
render: function () { |
|
console.log('App:render', this.state); |
|
var style = { |
|
app: { |
|
flexFlow: 'column' |
|
}, |
|
toggle: { |
|
background: Colors.dark, |
|
borderRadius: 3, |
|
color: Colors.white, |
|
padding: 20, |
|
position: 'absolute', |
|
top: 10 |
|
} |
|
}; |
|
return ( |
|
React.createElement("div", {className: "center", style: style.app}, |
|
React.createElement("button", {onClick: this._toggleItem, style: style.toggle}, Lang.toggle_item), |
|
React.createElement(Transition, null, |
|
this.state.item && React.createElement(Item, null) |
|
) |
|
) |
|
); |
|
} |
|
}); |
|
var Item = React.createClass({displayName: "Item", |
|
componentWillAppear: function (callback) { |
|
console.log('componentWillAppear'); |
|
setTimeout(callback, 1); // need at least one tick to fire transition |
|
}, |
|
componentDidAppear: function () { |
|
console.log('componentDidAppear'); |
|
this._enterStyle(); |
|
}, |
|
componentWillEnter: function (callback) { |
|
console.log('componentWillEnter'); |
|
setTimeout(callback, 1); |
|
}, |
|
componentDidEnter: function () { |
|
console.log('componentDidEnter'); |
|
this._enterStyle(); |
|
}, |
|
componentWillLeave: function (callback) { |
|
console.log('componentWillLeave'); |
|
this._leaveStyle(); |
|
setTimeout(callback, 500); // matches transition duration |
|
}, |
|
componentDidLeave: function () { |
|
console.log('componentDidLeave'); |
|
}, |
|
_enterStyle: function () { |
|
var el = this.refs.item.getDOMNode(); |
|
el.style.opacity = 1; |
|
}, |
|
_leaveStyle: function () { |
|
var el = this.refs.item.getDOMNode(); |
|
el.style.opacity = 0; |
|
}, |
|
render: function () { |
|
var style = { |
|
width: 100, |
|
height: 100, |
|
background: Colors.blue, |
|
opacity: 0, |
|
transition: 'opacity .5s' |
|
}; |
|
return React.createElement("div", {ref: "item", style: style}); |
|
} |
|
}); |
|
|
|
React.render(React.createElement(App, null), document.body); |
Awesome