Acrool React Fetcher is a solution for API integration and Auth state management in React projects. It helps you easily manage tokens, make API requests, perform GraphQL queries, and handle authentication flows.

A solution for API integration and token management in React projects
- Token state management and custom refresh mechanism
- GraphQL query support and custom fetcher
- Seamless integration with Redux Toolkit Query
- Flexible provider composition
- Easy to test and simulate login/logout/token invalidation scenarios
yarn add @acrool/react-fetcher
Add the following to your entry file (e.g. index.tsx
):
import "@acrool/react-fetcher/dist/index.css";
Wrap your app with AuthStateProvider
and AxiosClientProvider
. It is recommended to use AppFetcherProvider
to automatically wrap all necessary providers:
import AppFetcherProvider from '@/library/react-fetcher';
ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
<AppFetcherProvider>
<App />
</AppFetcherProvider>
);
For Redux Toolkit Query, create baseApi.ts
:
import { createGraphQLFetcher } from '@acrool/react-fetcher';
import { createApi } from '@reduxjs/toolkit/query/react';
import { axiosInstance } from '@/library/react-fetcher';
export const baseApi = createApi({
reducerPath: 'api',
baseQuery: async (query, api, extraOptions) => {
// Token handling and refresh are managed automatically
const data = await createGraphQLFetcher(axiosInstance, query.document)(query.args);
return { data };
},
endpoints: () => ({}),
});
import { useAuthState } from '@acrool/react-fetcher';
const { getTokens, updateTokens } = useAuthState();
const { data, refetch } = useGetBookmarkQuery({ variables: { bookmarkId: '1' } });
const handleMockTokenInvalid = () => {
updateTokens(curr => ({
...curr,
accessToken: 'mock-invalid-token',
}));
refetch();
};
const login = useLogin();
const logout = useLogout();
await login({ variables: { input: { account, password } } });
logout();
- The Dashboard page demonstrates how to operate token, API, and locale switching
- The Login page demonstrates login and error handling