@tanstack/react-db
Version:
React integration for @tanstack/db
34 lines (33 loc) • 935 B
JavaScript
import { useState, useMemo, useEffect } from "react";
import { useStore } from "@tanstack/react-store";
import { queryBuilder, compileQuery } from "@tanstack/db";
function useLiveQuery(queryFn, deps = []) {
const [restart, forceRestart] = useState(0);
const compiledQuery = useMemo(() => {
const query = queryFn(queryBuilder());
const compiled = compileQuery(query);
compiled.start();
return compiled;
}, [...deps, restart]);
const state = useStore(compiledQuery.results.asStoreMap());
const data = useStore(compiledQuery.results.asStoreArray());
useEffect(() => {
if (compiledQuery.state === `stopped`) {
forceRestart((count) => {
return count += 1;
});
}
return () => {
compiledQuery.stop();
};
}, [compiledQuery]);
return {
state,
data,
collection: compiledQuery.results
};
}
export {
useLiveQuery
};
//# sourceMappingURL=useLiveQuery.js.map