DEV Community

Vicky Vasilopoulou
Vicky Vasilopoulou

Posted on

1 1

Fetching Data with React Query and TypeScript II

Below you can see a way of fetching data using React query and TypeScript.

  • React Query Link

  • You can use Transform tool that transforms JSON files to TypeScript and much more. This tool is quite handy when you have nested data.

You need to create your graphql Client.
In my case I used the graphql-request:

import { GraphQLClient } from 'graphql-request'

const endpoint = `ADD YOUR ENDPOINT HERE`
export const graphQlClient = new GraphQLClient(endpoint)
Enter fullscreen mode Exit fullscreen mode
  1. Then you can make your useGqlQuery.ts file.
import { QueryKey, useQuery, UseQueryResult } from 'react-query';
import { graphQlClient } from '../../graphql/client';

export const useGqlQuery = <ResponseData = unknown, Variables = unknown>(
  queryKey: QueryKey,
  query: string,
  variables?: Variables,
): UseQueryResult<ResponseData, Error> => {
  return useQuery(queryKey, async () => {
    try {
      const response = await graphQlClient.request(query, variables);
      return response;
    } catch (error) {
      console.log(error);
    }
  });
};
Enter fullscreen mode Exit fullscreen mode
  1. Lets say we have a list of doctors that we want to fetch.
  2. First we need to create the types of the data that we get as a model.
export interface DoctorsDataModel {
  doctors: Doctor[];
}

export interface Doctor {
  first_name: string;
  last_name: string;
  doctor_id: string;
}
Enter fullscreen mode Exit fullscreen mode
  1. We can create our custom hook that will fetch our data.
export const useFetchDoctors = () => {
  const getDoctorsData = useGqlQuery<DoctorsDataModel>('getDoctorsData', GET_ALL_DOCTORS);

  const doctorsData = useMemo(() => getDoctorsData?.data?.doctors, [getDoctorsData]);
  return {
    doctorsData,
  };
};
Enter fullscreen mode Exit fullscreen mode
  1. Then on the component you want to use this data you can bring it simply as:
const { doctorsData } = useFetchDoctors();
Enter fullscreen mode Exit fullscreen mode

For mutations the schema is a little bit different:


export const useMutation = <Response = unknown, Variables = unknown>(
  query: string,
  sideEffects?: UseMutationOptions<Response, Error, Variables, unknown>,
): UseMutationResult<Response, Error, Variables, unknown> => {
  return useMutation(async (variables) => {
    const yourToken = 'YOURTOKEN'
    return graphQlClient.request(query, variables, {
      Authorization: XXXXX,
    })
  }, sideEffects)
}
Enter fullscreen mode Exit fullscreen mode

Sentry blog image

How to reduce TTFB

In the past few years in the web dev world, we’ve seen a significant push towards rendering our websites on the server. Doing so is better for SEO and performs better on low-powered devices, but one thing we had to sacrifice is TTFB.

In this article, we’ll see how we can identify what makes our TTFB high so we can fix it.

Read more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs