
Research
/Security News
Critical Vulnerability in NestJS Devtools: Localhost RCE via Sandbox Escape
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
react-pouchdb
Advanced tools
React wrapper for PouchDB that also subscribes to changes.
import { Suspense } from "react";
import { PouchDB, useFind, useDB } from "react-pouchdb";
function MyComponent() {
const docs = useFind({
selector: {
name: { $gte: null }
},
sort: ["name"]
});
const db = useDB();
return (
<ul>
{docs.map(doc => (
<li key={doc._id}>
{doc.name}
<button onClick={() => db.remove(doc)}>Remove</button>
</li>
))}
</ul>
);
}
<PouchDB name="dbname">
<Suspense fallback="loading...">
<MyComponent />
</Suspense>
</PouchDB>;
import { Suspense } from "react";
import { PouchDB, Find } from "react-pouchdb";
<PouchDB name="dbname">
<Suspense fallback="loading...">
<Find
selector={{
name: { $gte: null }
}}
sort={["name"]}
children={({ db, docs }) => (
<ul>
{docs.map(doc => (
<li key={doc._id}>
{doc.name}
<button onClick={() => db.remove(doc)}>Remove</button>
</li>
))}
</ul>
)}
/>
</Suspense>
</PouchDB>;
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} |
import { useGet } from "react-pouchdb";
function MyComponent() {
const doc = useGet({ id: "mydoc" });
return <div>{doc.name}</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": ..., ...}, ...] |
import { useFind } from "react-pouchdb";
function MyComponent() {
const docs = useFind({
selector: {
name: { $gte: null }
},
sort: ["name"]
});
return (
<ul>
{docs.map(doc => (
<li key={doc._id}>{doc.name}</li>
))}
</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": { ... } }, ...] |
import { useAllDocs } from "react-pouchdb";
function MyComponent() {
const rows = useAllDocs({
include_docs: true,
startkey: "profile_",
endkey: "profile_\uffff"
});
return (
<ul>
{rows.map(row => (
<li key={row.id}>{row.doc.name}</li>
))}
</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>
.
import { useDB } from "react-pouchdb";
function MyComponent({ title }) {
const db = useDB();
return <button onClick={() => db.post({ title })}>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={({ doc }) => <h1>{doc.title}</h1>} />
attachments: bool|string
Include document attachments. Set to "u8a"
to get attachments as Uint8Array
s.
<Get
attachments
id="mydoc"
children={({ doc }) => (
<>
<h1>{doc.title}</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={({ docs }) => (
<ul>
{docs.map(doc => (
<li key={doc._id}>{doc.name}</li>
))}
</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={({ rows }) => (
<ul>
{rows.map(row => (
<li key={doc.id}>{row.doc.name}</li>
))}
</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.
import { withDB } from "react-pouchdb";
const MyComponent = withDB(({ db, title }) => (
<button onClick={() => db.post({ title })}>Add</button>
));
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:
import { useFind, useDB } from "react-pouchdb";
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:
import { useFind, useDB } from "react-pouchdb/concurrent";
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
.
FAQs
React wrapper for PouchDB that also subscribes to changes.
We found that react-pouchdb demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
/Security News
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
Product
Customize license detection with Socket’s new license overlays: gain control, reduce noise, and handle edge cases with precision.
Product
Socket now supports Rust and Cargo, offering package search for all users and experimental SBOM generation for enterprise projects.