--- category: '@Firebase' --- # useFirestore Reactive [Firestore](https://firebase.google.com/docs/firestore) binding. Making it straightforward to **always keep your local data in sync** with remotes databases. ## Usage ```ts {9,12,17,22} import { useFirestore } from '@vueuse/firebase/useFirestore' import { initializeApp } from 'firebase/app' import { collection, doc, getFirestore, limit, orderBy, query } from 'firebase/firestore' import { computed, shallowRef } from 'vue' const app = initializeApp({ projectId: 'MY PROJECT ID' }) const db = getFirestore(app) const todos = useFirestore(collection(db, 'todos')) // or for doc reference const user = useFirestore(doc(db, 'users', 'my-user-id')) // you can also use ref value for reactive query const postsLimit = shallowRef(10) const postsQuery = computed(() => query(collection(db, 'posts'), orderBy('createdAt', 'desc'), limit(postsLimit.value))) const posts = useFirestore(postsQuery) // you can use the boolean value to tell a query when it is ready to run // when it gets falsy value, return the initial value const userId = shallowRef('') const userQuery = computed(() => userId.value && doc(db, 'users', userId.value)) const userData = useFirestore(userQuery, null) ``` ## Share across instances You can reuse the db reference by passing `autoDispose: false`. You can also set an amount of milliseconds before auto disposing the db reference. Note : Getting a not disposed db reference again don't cost a Firestore read. ```ts import { useFirestore } from '@vueuse/firebase/useFirestore' import { collection } from 'firebase/firestore' // ---cut--- const todos = useFirestore(collection(db, 'todos'), undefined, { autoDispose: false }) ``` or use `createGlobalState` from the core package ```ts twoslash include store // @filename: store.ts // ---cut--- // store.ts import { createGlobalState } from '@vueuse/core' import { useFirestore } from '@vueuse/firebase/useFirestore' export const useTodos = createGlobalState( () => useFirestore(collection(db, 'todos')), ) ``` ```vue ``` ## Type Declarations ```ts export interface UseFirestoreOptions { errorHandler?: (err: Error) => void autoDispose?: boolean | number } export type FirebaseDocRef = Query | DocumentReference type Falsy = false | 0 | "" | null | undefined export declare function useFirestore( maybeDocRef: MaybeRef | Falsy>, initialValue: T, options?: UseFirestoreOptions, ): Ref export declare function useFirestore( maybeDocRef: MaybeRef | Falsy>, initialValue: T[], options?: UseFirestoreOptions, ): Ref export declare function useFirestore( maybeDocRef: MaybeRef | Falsy>, initialValue?: T | undefined | null, options?: UseFirestoreOptions, ): Ref export declare function useFirestore( maybeDocRef: MaybeRef | Falsy>, initialValue?: T[], options?: UseFirestoreOptions, ): Ref ```