This is a React adapter library for reactive-query, providing seamless integration between reactive query models and React components.
npm install reactive-query-react
# or
yarn add reactive-query-reactThis library requires the following peer dependencies:
react(^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0)rxjs(^7.8.0)reactive-query(^0.2.7)
import React from 'react';
import { useRXQuery } from 'reactive-query-react';
import { yourQueryModel } from './your-query-model';
function MyComponent() {
const queryData = useRXQuery(yourQueryModel.query);
if (queryData.loading) {
return <div>Loading...</div>;
}
if (queryData.error) {
return <div>Error: {queryData.error.message}</div>;
}
return <div>Data: {JSON.stringify(queryData.data)}</div>;
}import React from 'react';
import { useRXQuery } from 'reactive-query-react';
import { userQueryModel } from './user-query-model';
function UserProfile({ userId }: { userId: string }) {
const userData = useRXQuery(
userQueryModel.getUser,
{
initialState: { name: 'Loading...', email: '' },
keysToRecallQuery: [userId] // Re-query when userId changes
}
);
return (
<div>
<h2>{userData.data?.name}</h2>
<p>{userData.data?.email}</p>
{userData.loading && <span>Loading...</span>}
</div>
);
}A React hook that converts observable query model data to React state, bridging the push strategy of RxJS to the pull strategy of React.
query: A function that returns an Observable of QueryResponse or undefinedconfigs: Optional configuration object
initialState: Initial data state before the query loadskeysToRecallQuery: Array of values that trigger re-querying when changed
Returns a QueryResponse object with the following properties:
data: The query result dataloading: Boolean indicating if the query is in progresserror: Error object if the query failedsuccess: Boolean indicating if the query completed successfully
The useRXQuery hook:
- Subscribes to the observable returned by your query function
- Manages React state for loading, error, and data states
- Automatically unsubscribes when the component unmounts
- Re-queries when specified keys change
- Handles the conversion from RxJS observables to React state
function ConditionalQuery({ shouldFetch, id }: { shouldFetch: boolean; id: string }) {
const data = useRXQuery(
shouldFetch ? () => queryModel.getData(id) : undefined
);
// When shouldFetch is false, returns initial state
return <div>{data.data ? 'Has data' : 'No data'}</div>;
}function DynamicQuery({ filters }: { filters: Record<string, any> }) {
const data = useRXQuery(
queryModel.getFilteredData,
{
keysToRecallQuery: [JSON.stringify(filters)] // Re-query when filters change
}
);
return <div>{/* render data */}</div>;
}This library is part of the reactive-query project. Please refer to the main repository for contribution guidelines.
MIT License - see the main reactive-query repository for details.