A simple React hook for listening to Firestore documents.
- If it's not installed already, install Firebase (modular, v9).
- Then run
npm i --save react-firestore-listener
Prop | Type | Description | Required |
---|---|---|---|
collection | string | Name of the collection to listen to (if specified in options) | Yes |
dataMapping | (data: Doc) => Doc or (data: Doc) => Promise | Map the data from each document with your own function. Document id (as docId ), metadata, and ref are included by default in data. |
No |
refresh | any[] | List of variables that if one or more are changed would force the listener to look again at Firestore | No |
options | See below | Object of options that help with the Firestore query | No |
Key | Type | Description | Required |
---|---|---|---|
conditions | Condition[] | An array of condition objects that specify the Firestore query | Yes |
orderBy | OrderBy[] | An array of order-by "clauses" that order the query | No |
limit | number | Limit the size of the documents returned by the query | No |
enableLogging | boolean | Should log package errors or warnings | No |
Index | Name | Type | Description | Required |
---|---|---|---|---|
0 | field | Firestore field | The field that you are querying on | Yes |
1 | operator | Firestore operator | The operator acts on the field and value | Yes |
2 | value | any | The value that you are looking to query with | Yes |
Key | Type | Description | Required |
---|---|---|---|
field | Firestore field | The field that you are ordering by | Yes |
desc | boolean | Whether to sort ascending or descending | Yes |
import React from "react"
import useFirestoreListener from "react-firestore-listener"
import { getApp, initializeApp } from "firebase/app"
const config = {
// insert your Firebase config here
}
/*
We need to make sure that Firebase is initialized before we can listen to documents.
*/
if (!getApp()) {
initializeApp(config)
}
interface Hobby {
name: string
}
const App = () => {
const hobbies = useFirestoreListener<Hobby>({ collection: "hobbies" })
return (
<div>
<h1>Welcome to my app</h1>
<br />
<div>My Hobbies</div>
<ul>
{hobbies.map((hobby) => {
return <li>{hobby.name}</li>
})}
</ul>
</div>
)
}