Use Firebase with React and Redux in ES6
- Suport for Firebase v3 (for older Firebase version use Branch 1.x)
- Integrated into redux
- Support small data ( using value) or large datasets ( usingchild_added,child_removed,child_changed
- queries support ( orderByChild,orderByKey,orderByValue,orderByPriority,limitToLast,limitToFirst,startAt,endAt,equalToright now )
- Automatic binding/unbinding
- Declarative decorator syntax for React components
- Support for nested props
- Out of the box support for authentication (with auto load user profile)
- Lots of helper functions
$ npm install --save redux-react-firebase
Include redux-react-firebase in your store
import {createStore, combineReducers, compose} from 'redux'
import {reduxReactFirebase, firebaseStateReducer} from 'redux-react-firebase'
const rootReducer = combineReducers({
  firebase: firebaseStateReducer
})
const config = {
  apiKey: '<your-api-key>',
  authDomain: '<your-auth-domain>',
  databaseURL: '<your-database-url>',
  storageBucket: '<your-storage-bucket>'
}
const createStoreWithFirebase = compose(
    reduxReactFirebase(config),
)(createStore)
store = createStoreWithFirebase(rootReducer, initialState)In the components
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import {connect} from 'react-redux'
import {firebase, helpers} from 'redux-react-firebase'
const {isLoaded, isEmpty, dataToJS} = helpers
@firebase( [
  'todos'
])
@connect(
  ({firebase}) => ({
    todos: dataToJS(firebase, 'todos'),
  })
)
class Todos extends Component {
  render() {
    const {firebase, todos} = this.props;
    const todosList = (!isLoaded(todos)) ?
                          'Loading'
                        : (isEmpty(todos) ) ?
                              'Todo list is empty'
                            : _.map(todos, (todo, id) => (<TodoItem key={id} id={id} todo={todo}/>) )
    return (
      <div>
        <h1>Todos</h1>
        <ul>
          {todosList}
        </ul>
        <input type="text" ref="newTodo" />
        <button onClick={handleAdd}>Add</button>
      </div>
    )
  }
}See API
You can see a complete example here
Mocha.js is used as test runner. To run the tests, run
npm run test