{"id":14384950,"url":"https://github.com/prescottprue/redux-firebasev3","last_synced_at":"2025-07-23T20:04:40.013Z","repository":{"id":43145162,"uuid":"64035406","full_name":"prescottprue/redux-firebasev3","owner":"prescottprue","description":"Actions/Reducer with HOC for using redux with Firebase v3","archived":false,"fork":false,"pushed_at":"2016-10-14T05:16:46.000Z","size":3488,"stargazers_count":36,"open_issues_count":0,"forks_count":9,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-30T16:49:45.628Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://redux-firebasev3.firebaseapp.com/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/prescottprue.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-07-23T20:43:03.000Z","updated_at":"2018-11-28T13:39:55.000Z","dependencies_parsed_at":"2022-09-17T06:03:16.496Z","dependency_job_id":null,"html_url":"https://github.com/prescottprue/redux-firebasev3","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/prescottprue/redux-firebasev3","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prescottprue%2Fredux-firebasev3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prescottprue%2Fredux-firebasev3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prescottprue%2Fredux-firebasev3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prescottprue%2Fredux-firebasev3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/prescottprue","download_url":"https://codeload.github.com/prescottprue/redux-firebasev3/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prescottprue%2Fredux-firebasev3/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266738687,"owners_count":23976447,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-28T18:01:48.486Z","updated_at":"2025-07-23T20:04:39.990Z","avatar_url":"https://github.com/prescottprue.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# redux-firebasev3\n\n[![NPM version][npm-image]][npm-url]\n[![NPM downloads][npm-downloads-image]][npm-url]\n[![Build Status][travis-image]][travis-url]\n[![Dependency Status][daviddm-image]][daviddm-url]\n[![Code Coverage][coverage-image]][coverage-url]\n[![License][license-image]][license-url]\n[![Code Style][code-style-image]][code-style-url]\n[![Gitter][gitter-image]][gitter-url]\n\n\u003e Higher Order Component (HOC) for using Firebase with React and Redux\n\n## Deprecation Warning\n\n[react-redux-firebase](https://github.com/prescottprue/react-redux-firebase) is the new version of this library\n\nThis library will no longer be updated under this name after `v1.0.0`, please use [react-redux-firebase](https://github.com/prescottprue/react-redux-firebase).\n\n## Demo\n\nView deployed version of Material Example [here](https://redux-firebasev3.firebaseapp.com/)\n\n\n## Features\n- Integrated into redux\n- Population capability (similar to JOIN)\n- Support small data ( using `value` ) or large datasets ( using `child_added`, `child_removed`, `child_changed` )\n- queries support ( `orderByChild`, `orderByKey`, `orderByValue`, `orderByPriority`, `limitToLast`, `limitToFirst`, `startAt`, `endAt`, `equalTo` right now )\n- Automatic binding/unbinding\n- Declarative decorator syntax for React components\n- Firebase v3+ support\n- Support for updating and nested props\n- Out of the box support for authentication (with auto load user profile)\n- Lots of helper functions\n\n## Install\n**NOTE:** redux-firebasev3 has been moved to [react-redux-firebase](https://github.com/prescottprue/react-redux-firebase)\n\n## [API](https://prescottprue.gitbooks.io/react-redux-firebase/content/)\nSee [API Docs](https://prescottprue.gitbooks.io/react-redux-firebase/content/)\n\n## Generator\n\n[generator-react-firebase](https://github.com/prescottprue/generator-react-firebase) uses react-redux-firebase when opting to include redux\n\n\n## Use\n\nInclude reduxFirebase in your store compose function:\n\n\n```javascript\nimport { createStore, combineReducers, compose } from 'redux'\nimport { reduxFirebase, firebaseStateReducer } from 'react-redux-firebase'\n\n// Add Firebase to reducers\nconst rootReducer = combineReducers({\n  firebase: firebaseStateReducer\n})\n\n// Firebase config\nconst config = {\n  apiKey: '\u003cyour-api-key\u003e',\n  authDomain: '\u003cyour-auth-domain\u003e',\n  databaseURL: '\u003cyour-database-url\u003e',\n  storageBucket: '\u003cyour-storage-bucket\u003e'\n}\n\n// Add redux Firebase to compose\nconst createStoreWithFirebase = compose(\n  reduxFirebase(config, { userProfile: 'users' }),\n)(createStore)\n\n// Create store with reducers and initial state\nconst store = createStoreWithFirebase(rootReducer, initialState)\n```\n\nIn components:\n```javascript\nimport React, { Component, PropTypes } from 'react'\nimport { connect } from 'react-redux'\nimport { firebase, helpers } from 'react-redux-firebase'\nconst { isLoaded, isEmpty, dataToJS } = helpers\n\n// Can be used if firebase is used elsewhere\n// import { firebaseConnect } from 'react-redux-firebase'\n// @firebaseConnect( [\n//   '/todos'\n// ])\n\n@firebase( [\n  '/todos'\n  // { type: 'once', path: '/todos' } // for loading once instead of binding\n])\n@connect(\n  ({firebase}) =\u003e ({\n    todos: dataToJS(firebase, '/todos'),\n  })\n)\nclass Todos extends Component {\n  static propTypes = {\n    todos: PropTypes.object,\n    firebase: PropTypes.object\n  }\n\n  render() {\n    const { firebase, todos } = this.props;\n\n    // Add a new todo to firebase\n    const handleAdd = () =\u003e {\n      const {newTodo} = this.refs\n      firebase.push('/todos', { text:newTodo.value, done:false })\n      newTodo.value = ''\n    }\n\n    // Build Todos list if todos exist and are loaded\n    const todosList = !isLoaded(todos)\n                        ? 'Loading'\n                        : isEmpty(todos)\n                          ? 'Todo list is empty'\n                          : Object.keys(todos).map(\n                              (key, id) =\u003e (\n                                \u003cTodoItem key={key} id={id} todo={todos[key]}/\u003e\n                              )\n                            )\n\n    return (\n      \u003cdiv\u003e\n        \u003ch1\u003eTodos\u003c/h1\u003e\n        \u003cul\u003e\n          {todosList}\n        \u003c/ul\u003e\n        \u003cinput type=\"text\" ref=\"newTodo\" /\u003e\n        \u003cbutton onClick={handleAdd}\u003e\n          Add\n        \u003c/button\u003e\n      \u003c/div\u003e\n    )\n  }\n}\nexport default Todos\n```\n\nAlternatively, if you choose not to use decorators:\n\n```javascript\n\nconst wrappedTodos = firebase([\n  '/todos'\n])(Todos)\nexport default connect(\n  ({firebase}) =\u003e ({\n    todos: dataToJS(firebase, '/todos'),\n  })\n)(wrappedTodos)\n\n```\n\n[npm-image]: https://img.shields.io/npm/v/redux-firebasev3.svg?style=flat-square\n[npm-url]: https://npmjs.org/package/redux-firebasev3\n[npm-downloads-image]: https://img.shields.io/npm/dm/redux-firebasev3.svg?style=flat-square\n[travis-image]: https://img.shields.io/travis/prescottprue/redux-firebasev3/master.svg?style=flat-square\n[travis-url]: https://travis-ci.org/prescottprue/redux-firebasev3\n[daviddm-image]: https://img.shields.io/david/prescottprue/redux-firebasev3.svg?style=flat-square\n[daviddm-url]: https://david-dm.org/prescottprue/redux-firebasev3\n[climate-image]: https://img.shields.io/codeclimate/github/prescottprue/redux-firebasev3.svg?style=flat-square\n[climate-url]: https://codeclimate.com/github/prescottprue/redux-firebasev3\n[coverage-image]: https://img.shields.io/codecov/c/github/prescottprue/redux-firebasev3.svg?style=flat-square\n[coverage-url]: https://codecov.io/gh/prescottprue/redux-firebasev3\n[license-image]: https://img.shields.io/npm/l/redux-firebasev3.svg?style=flat-square\n[license-url]: https://github.com/prescottprue/redux-firebasev3/blob/master/LICENSE\n[code-style-image]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square\n[code-style-url]: http://standardjs.com/\n[gitter-image]: https://img.shields.io/gitter/room/redux-firebase/gitter.svg?style=flat-square\n[gitter-url]: https://gitter.im/redux-firebase/Lobby?utm_source=share-link\u0026utm_medium=link\u0026utm_campaign=share-link\n[gitter-image]: https://img.shields.io/gitter/room/nwjs/nw.js.svg?style=flat-square\n[gitter-url]: https://gitter.im/prescottprue/redux-firebasev3\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprescottprue%2Fredux-firebasev3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprescottprue%2Fredux-firebasev3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprescottprue%2Fredux-firebasev3/lists"}