Reactfire
npm install reactfire
Hooks, Context Providers, and Components that make it easy to interact with Firebase.
By default, every reactfire hook throws a Promise until it has
connected to Firebase, allowing you to use Suspense to render a fallback component. If you don't want reactfire to throw a promise, pass an initial value to a reactfire hook. It will emit the initial value right away instead of throwing a promise.
Quickstart
Listen for realtime changes in a Firestore document with Reactfire. We'll use create-react-app to quickly get a Reactfire demo up and running.
-
Create a fresh React app.
create-react-app myapp -
Install reactfire and the Firebase SDK
npm i firebase reactfire -
Create a world-readable document in Firestore.
For example, a collection called tryreactfire with document burrito with field
yummy: true.To keep this as simple as possible, modify your security rules to make that document world-readable.
-
Modify
src/index.js-
Import firebase and reactfire
//... import { FirebaseAppProvider } from 'reactfire'; import * as firebase from 'firebase/app'; import 'firebase/performance'; //... -
Wrap your app in a
FirebaseAppProviderand provide the config object from the Firebase console//... const firebaseConfig = { /* add your config object from Firebase console */ }; ReactDOM.render( <FirebaseAppProvider firebaseConfig={firebaseConfig} initPerformance> <App /> </FirebaseAppProvider>, document.getElementById('root') ); //...
-
-
Modify
src/App.js-
Import
firebase/firestoreas well as theuseFirestoreDocanduseFirebaseApphooks//... import 'firebase/firestore'; import { UseFirestoreDoc } from 'reactfire'; //... -
Add a function component
//... function Burrito() { // create a ref const firebaseApp = useFirebaseApp(); const burritoRef = firebaseApp .firestore() .collection('tryreactfire') .doc('burrito'); // get the doc. just one line! const burritoDoc = useFirestoreDoc(burritoRef); // get the value from the doc const isYummy = burritoDoc.data().yummy; return <p>The burrito is {isYummy ? 'good' : 'bad'}</p>; } //... -
Render your component inside of a
Suspensetag
We need to do this because
useFirestoreDocthrows a Promise while it is waiting for a response from Firestore. Suspense will catch the Promise and renderfallbackuntil the Promise is resolved.//... function App() { return ( <div className="App"> <header className="App-header">{/* ... */}</header> <Suspense fallback={'loading burrito status...'}> <Burrito /> </Suspense> </div> ); } //... -
-
Run your app!
npm run start -
Edit the value of
yummyin the Firebase console, and watch it update in real time in your app! 🔥🔥🔥
Docs
ToC
- Providers
- Hooks
useFirebaseApp- Authentication
- Database
- Cloud Firestore
- Realtime Database
- Cloud Storage
- Components
Providers
FirebaseAppProvider
A React Context Provider that allows the useFirebaseApp hook to pick up the firebase object.
Sample usage
const firebaseConfig = {
/* web app config from Firebase console */
};
<FirebaseAppProvider firebaseConfig={firebaseConfig} initPerformance>
<App />
</FirebaseAppProvider>;
Props
| Prop | Type | Description |
|---|---|---|
| config | Object | the web app config object usually passed to initializeApp |
| initPerformance | bool | Whether or not to initialize Firebase Performance Monitoring |
Hooks
useFirebaseApp
When called from a component nested inside a FirebaseAppProvider, useFirebaseApp returns the root Firebase object.
IMPORTANT: By default,
useFirebaseAppreturns a firebase object without any products attached to it (e.g. you can't callfirebase.firestore(). To do that, you need toimport 'firebase/firestore'or any other Firebase feature as needed)
Returns
useUser
Get the user that is currently signed in.
Throws a Promise by default
Parameters
| Parameter | Type | Description |
|---|---|---|
| auth ? | Auth |
[optional] auth object. If not provided, useUser will use useFirebaseApp to find the Auth object. |
| options ? | ReactFireOptions | Options. This hook will not throw a Promise if you provide startWithValue. |
Returns
useFirestoreDoc
Listen to a Firestore Document.
Throws a Promise by default
Parameters
| Parameter | Type | Description |
|---|---|---|
| ref | DocumentReference |
A reference to the document you want to listen to |
| options ? | ReactFireOptions | Options. This hook will not throw a Promise if you provide startWithValue. |
Returns
useFirestoreCollection
Listen to a Firestore Collection.
Throws a Promise by default
Parameters
| Parameter | Type | Description |
|---|---|---|
| ref | CollectionReference |
A reference to the collection you want to listen to |
| options ? | ReactFireOptions | Options. This hook will not throw a Promise if you provide startWithValue. |
Returns
useDatabaseObject
Listen to a Realtime Database Object.
Throws a Promise by default
Parameters
| Parameter | Type | Description |
|---|---|---|
| ref | Reference |
A reference to the object you want to listen to |
| options ? | ReactFireOptions | Options. This hook will not throw a Promise if you provide startWithValue. |
Returns
useDatabaseList
Listen to a Realtime Database list.
Throws a Promise by default
Parameters
| Parameter | Type | Description |
|---|---|---|
| ref | Reference |
A reference to the list you want to listen to |
| options ? | ReactFireOptions | Options. This hook will not throw a Promise if you provide startWithValue. |
Returns
useStorageTask
Listen to a Storage UploadTask
Throws a Promise by default
Parameters
| Parameter | Type | Description |
|---|---|---|
| task | UploadTask |
|
| ref | Reference |
|
| options ? | ReactFireOptions |
Returns
useStorageDownloadURL
Subscribe to a storage blob's download URL
Throws a Promise by default
Parameters
| Parameter | Type | Description |
|---|---|---|
| ref | Reference |
|
| options ? | ReactFireOptions |
Returns
string
Components
AuthCheck
Renders children if a user is signed in and meets the required claims. Renders fallback otherwise.
Props
| Property | Type |
|---|---|
| auth | Auth |
| children | React.Component |
| fallback | React.Component |
| requiredClaims | Object |
SuspenseWithPerf
Starts a Firebase Performance Monitoring trace and ends it when suspense stops suspending.
Props
| Property | Type |
|---|---|
| children | React.Component |
| fallback | React.Component |
| firePerf ? | any |
| traceId | string |
ReactFireOptions
| Property | Type |
|---|---|
| startWithValue | any |
Contributing
For development
yarn installcdinto the reactfire/reactfire directory. runyarn run watch.- In a new terminal,
cdinto the reactfire/sample-simple directory. runyarn start. - Head over to https://localhost:3000 to see the running sample
Testing
cdinto the reactfire/reactfire directory- run
yarn test