Graphql best practices
Graphql queries/mutations used across different files in the same folder
For queries/mutations used across different files in the same folder (e.g. a USERS query that is used in src/profile/user-page.tsx and in src/profile/user-popup.tsx), place then into a separate file within that folder and import them into the components that need them. For example:
In a file called queries.ts
in src/profile/data/queries.ts:
export const USERS = gql`
query {
users {
id
name
}
}
`
In the component:
import {USERS} from './data/queries'
const {data, loading, error} = useQuery<UserReturnType>(USERS)
Graphql queries/mutations used across different files in different folders
For queries/mutations used across different files in different folders (e.g. a USERS query that is used in src/profile/user-page.tsx and in src/postings/my-page.tsx), place then into _shared and import them into the components that need them. If you do this, make sure that both places have the exact same query. For example:
In a file called queries.ts
in src/shared/data/queries.ts:
export const USERS = gql`
query {
users {
id
name
}
}
`
In the component:
import {USERS} from '../../shared/data/queries'
Always define and export graphql return types where the query lives
For example, if you have a query like this:
export const USERS = gql`
query {
users {
id
name
}
}
`
Then you should also define and export a return type like this:
export interface UserReturnType {
id: string
name: string
}
And then use it in the component like this:
const {data, loading, error} = useQuery<{users: UserReturnType}>(USERS)
Make sure that the type you define is based on the query that you wrote, and matches the schema on the backend, including the optional properties.