일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- svelte
- JavaScript
- react
- onDestory
- TypeScript
- nestjs
- apiTest
- GIT
- cron
- golang
- Svelte LifeCycle
- PostgreSQL
- docker-network
- testing
- docker
- ...$$restProps
- :=
- 도커
- mock
- bitwiseNot
- go
- Terraform
- smui
- GraphQL
- 번역
- githook
- 인라인핸들러
- reactjs
- 도커컨테이너
- IAC
- Today
- Total
Den`s blog
useQuery, lazyQuery (w/ React, Typescript) 본문
React 에서 GraphQL을 사용할 때 보통 useQuery
를 사용한다.
useQuery
란, API 로 치면 API Call 을 하는 것이라고 보면 된다.
const ITEMS_QUERY = gql`
query allItemsQuery($input: AllItemInput!) {
allItems {
ok
error
items {
name
registeredAt
}
}
}
`;
const { data, loading } = useQuery<allItemsQuery, allItemsQueryVariables>(ITEMS_QUERY, {
variables: {
input: {
page: 1,
}
}
});
위 코드는 GraphQL 에서 allItemsQuery
의 Query가 있고 그 input 으로 AllItemInput
이 있을 경우다.
(AllItemInput 은 page 를 변수로 받는다).
ITEMS_QUERY 까지 만들고 apollo codegen 을 실행하고 나면 allItemsQueryVariables
이 생성된다. 그럼 이제 useQuery 에서 사용하면 되는 것이다. Type 으로는 allItemsQuery
와 allItemsQueryVariables
로 넣고 Input 을 variables 로 넣어주면 실행이 된다.
여기까지가 Query 를 사용하는 사전지식 이라고 보자.
useQuery
는 페이지가 로딩됐을 때 자동으로 실행되어 data를 받아낸다.
그런데, 검증 등을 거쳐야 해서 조금은 늦게 혹은 버튼을 누르는 등의 액션이 있어서 사용해야 할 경우는 어떻게 해야 할까 ?
이때 사용하는 것이 lazyQuery
이다.
lazyQuery
사용은 거의 똑같으나, "Query를 지금 돌릴거야!" 라고 하는 액션이 추가로 든다.
const [call, { data, loading, called }] = useLazyQuery<
allItemsQuery,
allItemsQueryVariables
>(ITEMS_QUERY, {
variables: {
input: {
page: 1,
}
}
});
보이는 것과 같이 useQuery
와 굉장히 유사하지만, call 이라는 변수를 새로 받고 called 라는 것을 받는것이 차이가 있다.
이름에서 보이는 것처럼, call 은 "호출해줘!" 라는 액션을 가진 아이다. 이 아이를 호출하게 되면 그때 쿼리가 실행이 되고 called 는 false 였다가 true 로 변경되게 된다.
지금까지, useQuery 와 lazyQuery를 React(w/ Typescript) 에서 사용하는 것에 대해서 간단하게 알아보았다.
다음에는 FRAGEMENT 에 대해서 알아보도록 하려 한다.
'GraphQL' 카테고리의 다른 글
WebSocket In Graphql - PubSub (0) | 2021.01.31 |
---|