JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://fb.me/react-with-addons-0.13.3.js"></script>
<script src="https://fb.me/JSXTransformer-0.13.3.js"></script>
<script src="https://fb.me/react-js-fiddle-integration.js"></script>
<div>outside</div>
<div id="react" />
<div>outside</div>
JavaScript 1.7
/** @jsx React.DOM */
var ClickMixin = {
_clickDocument: function (e) {
var component = React.findDOMNode(this.refs.component);
if (e.target == component || $(component).has(e.target).length) {
this.clickInside(e);
} else {
this.clickOutside(e);
}
},
componentDidMount: function () {
$(document).bind('click', this._clickDocument);
},
componentWillUnmount: function () {
$(document).unbind('click', this._clickDocument);
},
}
var Ex1 = React.createClass({
mixins: [ClickMixin],
getInitialState: function () {
return {
last: "-"
};
},
clickInside: function (e) {
this.setState({
last: "inside"
});
},
clickOutside: function (e) {
this.setState({
last: "outside"
});
},
render: function () {
return ( < div style = {
{
backgroundColor: 'lightBlue'
}
}
ref = 'component' > inside < p > nested inside < /p>(last click was: {this.state.last})</div > );
}
});
var Ex2 = React.createClass({
mixins: [ClickMixin],
getInitialState: function () {
return {
last: "-"
};
},
clickInside: function (e) {
this.setState({
last: "inside"
});
},
clickOutside: function (e) {
this.setState({
last: "outside"
});
},
render: function () {
return ( < div style = {
{
backgroundColor: 'lightGreen'
}
}
ref = 'component' > inside(last click was: {
this.state.last
}) < /div>);
}
});
React.render(
<div>
<Ex1 />
<Ex2 />
</div>,
document.getElementById("react"));