rektide / ReactiveElements

Allows to use React.js component as HTML element (web component)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Reactive Elements

Convert React.js components into Web Components

Compatible with any custom elements implementation or polyfill.

Demo

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

  • React.js
  • function.bind and Object.create support or polyfills
  • Custom elements support or polyfill

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

MIT: http://mit-license.org/

Copyright 2014 Denis Radin aka PixelsCommander

Inspired by Christopher Chedeau`s react-xtags

About

Allows to use React.js component as HTML element (web component)


Languages

Language:JavaScript 57.9%Language:HTML 35.6%Language:CSS 6.5%