Hooks, Context Providers, and Components that make it easy to interact with Firebase.
- Easy realtime updates for your function components - Hooks
like
useUser
anduseFirestoreCollection
let you easily subscribe to auth state, realtime data, and all other Firebase SDK events. Plus, they automatically unsubscribe when your component unmounts. - Loading states handled by
<Suspense>
- ReactFire's hooks throw promises that Suspense can catch. No moreisLoaded ?...
- let React handle it for you. - Faster initial page load times - Load only the code you need, when you need it, with
useFirestore
,useAuth
,useRemoteConfig
, and more. - Convenient components for common use cases - Only want to render a component if a user is signed in? Wrap it in
<AuthCheck />
. Need to automatically instrument yourSuspense
load times with RUM? Use<SuspenseWithPef />
.
# npm
npm install --save reactfire firebase
# yarn
yarn add reactfire firebase
Check out the live version on StackBlitz!
import React, { Component } from 'react';
import { createRoot } from 'react-dom';
import {
FirebaseAppProvider,
useFirestoreDocData,
useFirestore,
SuspenseWithPerf
} from 'reactfire';
const firebaseConfig = {
/* Add your config from the Firebase Console */
};
function Burrito() {
// lazy load the Firestore SDK
// and create a ref
const burritoRef = useFirestore()
.collection('tryreactfire')
.doc('burrito');
// subscribe to the doc. just one line!
// throws a Promise for Suspense to catch,
// and then streams live updates
const burrito = useFirestoreDocData(burritoRef);
return <p>The burrito is {burrito.yummy ? 'good' : 'bad'}!</p>;
}
function App() {
return (
<FirebaseAppProvider firebaseConfig={firebaseConfig}>
<h1>🌯</h1>
<SuspenseWithPerf
fallback={<p>loading burrito status...</p>}
traceId={'load-burrito-status'}
>
<Burrito />
</SuspenseWithPerf>
</FirebaseAppProvider>
);
}
// Enable Concurrent Mode
// https://reactjs.org/docs/concurrent-mode-adoption.html#enabling-concurrent-mode
createRoot(document.getElementById('root')).render(<App />);
If you're looking for docs for the deprecated ReactFire v1 (the one that uses mixins), click here