A set of React Query hooks integrating with Firebase.

Installation DocumentationLicense


Backed by React QueryReact QueryDevToolUn-opinionatedPerformant & EfficientQueriesQuery KeysMutationsMutationsFully TypedNotelearn more about it heretsx import { useFirestoreDocument, useFirestoreTransaction, } from "@react-query-firebase/firestore"; import { doc } from "firebase/firestore"; import { firestore } from "./config/firebase"; type Product = { name: string; price: number; }; function ProductPage({ id }: { id: string }) { // Create a Firestore document reference const ref = doc(firestore, "products", id); // Query a Firestore document using useQuery const product = useFirestoreDocument<Product>( ["product", id], ref, { // Subscribe to realtime changes subscribe: true, // Include metadata changes in the updates includeMetadataChanges: true, }, { // Optionally handle side effects with React Query hook options onSuccess(snapshot) { console.log("Successfully fetched product ID: ", snapshot.id); }, } ); // Run a Firestore transaction as Mutation using useMutation const like = useFirestoreTransaction( auth, async (tsx) => { const record = await tsx.get(ref); tsx.update(ref, { likes: record.data().likes + 1, }); }, { onError(error) { console.error("Failed to like product!", error); }, } ); if (product.isLoading) { return <div>Loading...</div>; } if (product.isError) { return <div>Failed to fetch product: {product.error.message}</div>; } const snapshot = product.data; // DocumentSnapshot<Product> return ( <div> <h1>{snapshot.data().name}</h1> <button disabled={like.isLoading} onClick={() => like.mutate()}> Like Product! </button> {like.isError && <p>Failed to like product: {like.error.message}</p>} </div> ); }reactreact-queryfirebasebash npm i --save react react-query firebaseInstallationbash npm i --save @react-query-firebase/firestore@react-query-firebase/analytics@react-query-firebase/auth@react-query-firebase/database@react-query-firebase/firestore@react-query-firebase/functionsLICENSE

Built and maintained by Invertase.