react-pouchdb
React wrapper for PouchDB that also subscribes to changes.
Contents
Examples
Hooks
;; { const docs = ; const db = ; return <ul> docs </ul> ;} <PouchDB name="dbname"> <Suspense fallback="loading..."> <MyComponent /> </Suspense></PouchDB>;
Components
;; <PouchDB name="dbname"> <Suspense fallback="loading..."> <Find selector= name: $gte: null sort="name" children= <ul> docs </ul> /> </Suspense></PouchDB>;
API
useGet([db,] options)
Get document and listen to changes.
db: string|object
(optional)
Override the context value or use as an alternative to <PouchDB>
.
options: object
Options to get
. If other than id
, attachments
, ajax
or binary
options are set, live changes are disabled.
options.attachments: bool|string
(optional)
Include document attachments. Set to "u8a"
to get attachments as Uint8Array
s.
Returns
Value | Description | Example |
---|---|---|
undefined | Request is pending (only in Concurrent API) | undefined |
null | Missing document | null |
Document | Found document | {"_id": ..., "_rev": ..., ...} |
Deleted document | Deleted document | {"_id": ..., "_rev": ..., "_deleted": true} |
; { const doc = ; return <div>docname</div>;}
useFind([db,] options)
Find documents and listen to changes.
db: string|object
(optional)
Override the context value or use as an alternative to <PouchDB>
.
options: object
Options to find
.
options.sort: (string|object)[]
(optional)
If sort is present, then it will be used to create a mango index with createIndex
.
Returns
Value | Description | Example |
---|---|---|
undefined | Request is pending (only in Concurrent API) | undefined |
Array | List of documents | [{"_id": ..., "_rev": ..., ...}, ...] |
; { const docs = ; return <ul> docs </ul> ;}
useAllDocs([db,] options)
Get multiple rows of document meta-data (id and rev) with optional the documents and listen to changes.
db: string|object
(optional)
Override the context value or use as an alternative to <PouchDB>
.
options: object
Options to allDocs
.
options.attachments: bool|string
(optional)
Include document attachments. Set to "u8a"
to get attachments as Uint8Array
s.
Returns
Value | Description | Example |
---|---|---|
undefined | Request is pending (only in Concurrent API) | undefined |
Array | List of document meta data with the document. The rows-field from allDocs . |
[{"id": "doc_id", "key": "doc_id", "value": { "rev": ... }, "doc": { ... } }, ...] |
; { const rows = ; return <ul> rows </ul> ;}
useDB([db])
Get the PouchDB instance from the context.
db: string|object
(optional)
Override the context value or use as an alternative to <PouchDB>
.
; { const db = ; return <button onClick= db>Add</button>;}
<PouchDB>
Connect to a database and provide it from the context to other components and hooks.
name: string
maxListeners: number
Similar change requests are detected and cached. You might still need to increase the number of maxListeners
, if you use useGet
/ <Get>
with lots of different options.
...rest: any
Other props are passed to PouchDB constructor as a second argument.
<PouchDB name="dbname"> <App /></PouchDB>
<Get>
Get document and listen to changes.
db: string|object
(optional)
Override the context value or use as an alternative to <PouchDB>
.
<Get db="dbname" id="mydoc" ... />
id: string
docId
.
children: func|component|element
Function is called / component is rendered / element is cloned with props db
and doc
. See useGet
return value for possible values for doc
.
<Get id="mydoc" children= <h1>doctitle</h1> />
attachments: bool|string
Include document attachments. Set to "u8a"
to get attachments as Uint8Array
s.
<Get attachments id="mydoc" children= <> <h1>doctitle</h1> <code>doc_attachments"att.txt"data</code> </> />
...rest: any
Other props are passed to get
method as second argument. If other than attachments
, ajax
or binary
props are provided, live changes are disabled.
<Find>
Find documents and listen to changes.
db: string|object
(optional)
Override the context value or use as an alternative to <PouchDB>
.
<Find db="dbname" selector=... ... />
selector: object
sort: array
If sort is present, then it will be used to create a mango index with createIndex
.
limit: number
skip: number
See find
.
children: func|component|element
Function is called / component is rendered / element is cloned with props db
and docs
. See useFind
return value for possible values for docs
.
<Find selector= name: $gte: null sort="name" children= <ul> docs </ul> />
<AllDocs>
Get multiple rows of document meta-data (id and rev) with optional the documents and listen to changes.
db: string|object
(optional)
Override the context value or use as an alternative to <PouchDB>
.
<AllDocs db="dbname" include_docs ... />
include_docs: bool
conflicts: bool
attachments: bool|string
Include document attachments. Set to "u8a"
to get attachments as Uint8Array
s.
startkey: string
endkey: string
descending: bool
keys: string[]
limit: number
skip: number
See allDocs
.
children: func|component|element
Function is called / component is rendered / element is cloned with props db
and rows
. See useAllDocs
return value for possible values for rows
.
<AllDocs include_docs startkey="profile_" endkey="profile_\uffff" children= <ul> rows </ul> />
withDB([db,] Component)
Higher-order component for accessing the PouchDB instance anywhere in the <PouchDB>
children. Note that for convenience <Get>
and <Find>
render methods will be passed the db
prop as well.
; const MyComponent = ;
API Variants
Synchronous
It is guaranteed that the API returns with a final response value from PouchDB. Because of this, requests are made sequentially.
Import from react-pouchdb
to use the Synchronous API. Example:
;
Concurrent
Requests are made simultaneously. The drawback is that while a request is pending, the API returns undefined
, which user must handle without error, i.e. render null
and use <Suspense>
to show a loading indicator.
Import from react-pouchdb/concurrent
to use the Concurrent API. Example:
;
Package dependencies
The package expects pouchdb
to be available. If you use pouchdb-browser
or pouchdb-node
, import from react-pouchdb/browser
or react-pouchdb/node
respectively.
If you use pouchdb-browser
or pouchdb-node
and Concurrent API, import from react-pouchdb/browser/concurrent
or react-pouchdb/node/concurrent
.