Convert React.js components into Web Components
Compatible with any custom elements implementation or polyfill.
UPD Convert Angular and Backbone views as well with MVC elements project
Example
Using component in HTML
<body>
<my-react-component items="{window.someArray}"></my-react-component>
</body>
React component definition
/* @jsx React.DOM */
MyComponent = React.createClass({
render: function() {
console.log(this.props.items);
console.log(this.props._content); // original tag contents in a <content>
return <ul><li>React content</li></ul>;
}
});
document.registerReact('my-react-component', MyComponent);
Find demo in corresponding folder.
Nesting
Original content of a custom element is injected to component as this.props._content
.
<my-react-component>Hello world</my-react-component>
In this case props._content is equal to "Hello world".
Handling attributes change
You may add attributeChanged
callback to component in order to handle / modify / filter incoming values.
attributeChanged: function(attributeName, oldValue, newValue) {
console.log('Attribute ' + attributeName + ' was changed from ' + oldValue + ' to ' + newValue);
this.props[attributeName] = parseInt(newValue);
}
Communicate via DOM events
You may trigger DOM event from React component by using following snippet:
var event = new CustomEvent('change', {
bubbles: true
});
this.getDOMNode().dispatchEvent(event)
Subscribing to DOM events is similar:
this.getDOMNode().addEventListener('change', function(e){...});
NPM and Bower
- NPM: reactive-elements
- Bower: ReactiveElements
Dependencies
Custom elements polyfill behavior
Polyfill binds to DOMContentLoaded
in order to process DOM so no custom elements exist until it fired. To prevent this hook into DOMContentLoaded
and operate elements on it or after.
License
Copyright 2014 Denis Radin aka PixelsCommander
Inspired by Christopher Chedeau`s react-xtags