-
[ReactJS] 리액트에서 Apollo Client로 전역 상태 관리하기JavaScript/React 2023. 2. 1. 23:44728x90반응형
리액트에는 ContextAPI, Redux, MobX 등 전역으로 상태관리를 하기 위한 많은 선택지가 있다. Apollo Client도 그 중 하나의 선택지로 로컬에서 전역 상태관리를 하기위해 사용할 수 있다.
Apollo Client란
Apollo Client는 GraphQL 기반의 상태 관리 라이브러리이다.
클라이언트 어플리케이션의 GraphQL과 데이터 교환을 돕는다.
Apollo Client의 기능
1. graphQL API에서 데이터를 fetch해올 수 있다.
2. 어플리케이션에서 로컬로 상태 관리를 할 수 있게 해준다.
즉, 서버에 있는 데이터를 가지고 오고, 로컬에 있는 데이터를 관리할 수 있게 해준다.
그리고 이 두 종류의 데이터를 동기화할 수 있게 한다는 것이 큰 장점이다.
Apollo Client 설치하기
npm install @apollo/client graphql
https://www.apollographql.com/docs/react/
Introduction to Apollo Client
Apollo Client is a comprehensive state management library for JavaScript that enables you to manage both local and remote data with GraphQL. Use it to fetch, cache, and modify application data, all while automatically updating your UI. Apollo Client helps
www.apollographql.com
📁 src/client.js
import { ApolloClient, gql, InMemoryCache } from "@apollo/client"; const client = new ApolloClient({ uri: "http://localhost:4000/", // 서버 cache: new InMemoryCache(), }); export default client;
📁 src/App.js
const root = ReactDOM.createRoot(document.getElementById("root")); root.render( <React.StrictMode> <ApolloProvider client={client}> <App /> </ApolloProvider> </React.StrictMode> );
App을 apollo client를 설정해준 ApolloProvider로 감싸준다.
그러면 App 안에 있는 모든 곳에서 client에 접근할 수 있게 된다. 모~~~든 곳에서 자유롭게 client에 접근할 수 있기 때문에 편리하다.
굿.
useQuery hook
useQuery hook을 사용하면 좋은 점
useQuery를 호출하면 GraphQL 요청에서 얻은 data, client, error, loading, networkStatus 정보 등등을 모두 얻을 수 있다.
const ALL_MOVIES = gql` query getAllMovies { allMovies { title id } } `;
export default function Movies() { const { data, loading, error } = useQuery(ALL_MOVIES); if (loading) { return <h1>Loading...</h1>; } if (error) { return <h1>Could not fetch :(</h1> } return( <ul> <h1>Movies</h1> {data.allMovies.map(movie => ( <li key={movie.id}> <Link to={`/movies/${movie.id}`}>{movie.title}</Link> </li> ))} </ul> ); }
LIST'JavaScript > React' 카테고리의 다른 글
[React] React Query와 React Suspense 사용하기 (2) 2023.03.28 [React] 상태 관리 라이브러리 Recoil 이해하기 (0) 2023.03.27 [ReactJS] React Hook Form 사용하기 (0) 2023.01.30 [React] TanStack Query Devtools로 query정보 시각화하기 (0) 2023.01.28 [React] React에서 axios로 API 호출하기 (0) 2023.01.27