Skip to content

Instantly share code, notes, and snippets.

@joshgillies
Created May 1, 2017 03:43
Show Gist options
  • Save joshgillies/45cd998857a0390d6cab4589095b8220 to your computer and use it in GitHub Desktop.
Save joshgillies/45cd998857a0390d6cab4589095b8220 to your computer and use it in GitHub Desktop.
esnextbin sketch
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>ESNextbin Sketch</title>
<!-- put additional styles and scripts here -->
</head>
<body>
<!-- put markup and other contents here -->
</body>
</html>
var component = require('hypercomponent')
var ReactDOM = require('react-dom')
var React = require('react')
function Greeter () {
let count = 1
const greet = component((html, data) => html`
<button onclick="${onclick}">
${data.text}
</button>
`)()
function onclick (e) {
greet.render({ text: `I've been clicked ${count++} times!` })
}
return greet
}
function toReact (component, react) {
return react.createClass({
shouldComponentUpdate: function (nextProps) {
return false
},
componentWillReceiveProps: function (props) {
if (this._element) this._element.render(props)
},
componentDidMount: function () {
if (!this._element) {
this._element = component()
this._node.appendChild(this._element.render(this.props))
}
},
setRef: function (_node) {
this._node = _node
},
render: function () {
return react.createElement('div', { ref: this.setRef })
}
})
}
Greeter = toReact(Greeter, React)
ReactDOM.render(
<div>
<Greeter text="Hello World!" />
<Greeter text="Hello There!" />
</div>, document.body);
{
"name": "esnextbin-sketch",
"version": "0.0.0",
"dependencies": {
"react-dom": "15.4.2",
"react": "15.4.2",
"babel-runtime": "6.23.0",
"hypercomponent": "2.0.0"
}
}
'use strict';
var _taggedTemplateLiteral2 = require('babel-runtime/helpers/taggedTemplateLiteral');
var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2);
var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n <button onclick="', '">\n ', '\n </button>\n '], ['\n <button onclick="', '">\n ', '\n </button>\n ']);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var component = require('hypercomponent');
var ReactDOM = require('react-dom');
var React = require('react');
function Greeter() {
var count = 1;
var greet = component(function (html, data) {
return html(_templateObject, onclick, data.text);
})();
function onclick(e) {
greet.render({ text: 'I\'ve been clicked ' + count++ + ' times!' });
}
return greet;
}
function toReact(component, react) {
return react.createClass({
shouldComponentUpdate: function shouldComponentUpdate(nextProps) {
return false;
},
componentWillReceiveProps: function componentWillReceiveProps(props) {
if (this._element) this._element.render(props);
},
componentDidMount: function componentDidMount() {
if (!this._element) {
this._element = component();
this._node.appendChild(this._element.render(this.props));
}
},
setRef: function setRef(_node) {
this._node = _node;
},
render: function render() {
return react.createElement('div', { ref: this.setRef });
}
});
}
Greeter = toReact(Greeter, React);
ReactDOM.render(React.createElement(
'div',
null,
React.createElement(Greeter, { text: 'Hello World!' }),
React.createElement(Greeter, { text: 'Hello There!' })
), document.body);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment