horizon-react
React bindings for rethinkdb/horizon. This package just fork from react-horizon, only adding a update method to previous package.
Installation
npm i -S horizon-react-extend
Usage
Currently, horizon-react exports two enhancers.
Similarly to react-redux, you'll have to first wrap a root component with a
Connector
which will initialize the horizon instance and then subscribe to
data by using subscribe
.
Example Root component:
import { Connector } from 'horizon-react';
import store from './store';
import TodoList from './components/TodoList';
export default () => (
<Connector store={store}>
<TodoList />
</Connector>
);
export default () => (
<Connector store={store} horizon={horizon}>
<TodoList />
</Connector>
);
Example Subscribed component:
import { subscribe } from 'horizon-react';
import Todo from './Todo';
const mapDataToProps = {
todos: (hz) => hz('todos')
};
const TodoList = (props) => (
<ul>
{props.todos.map( todo => <Todo {...todo} /> )}
</ul>
);
export default subscribe({
mapDataToProps
})(TodoList)
Advanced Subscribed component:
import { subscribe } from 'horizon-react';
import Todo from './Todo';
const mapDataToProps = {
todos: (hz, props) => hz('todos').limit(props.limit)
};
const mapStateToProps = (state, props) => ({
ui: state.checkedTodos
});
const TodoList = (props) => (
<ul>
{props.todos.map( todo => <Todo {...todo} /> )}
</ul>
);
export default subscribe({
mapDataToProps,
mapStateToProps
})(TodoList)
FAQ
Does this work with React Native?
It should! If not, please create a new issue!
Can I access the Horizon instance in the child components?
Yes, you can either directly use context
to access .horizon or just use subscribe()(MyComponent)
. subscribe
will pass the Horizon instance from the context down to your component as a prop horizon
.
Example:
import { subscribe } from 'horizon-react';
const AddTodoButton = (props) => (
<button onClick={() => {
props.horizon('todos').store({ text: 'A new todo item.' });
}}>
Add a todo item.
</button>
);
export default subscribe()(AddTodoButton);
Contributing
Pull Requests are very welcome!
If you find any issues, please report them via Github Issues!
License
(MIT)