티스토리 뷰
안녕하세요 강정호입니다.
오늘은 ApolloClient를 이용하여 Graphql API와 연동해보겠습니다.
index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './Component/App';
import {ApolloProvider} from "react-apollo-hooks";
import Client from "./Apollo/Client";
ReactDOM.render(
<React.StrictMode>
<ApolloProvider client={Client}>
<App />
</ApolloProvider>
</React.StrictMode>,
document.getElementById('root')
);
ApolloProvider 란?
ApolloClient를 사용하여 Graphql API와 연동 가능하게 해주는 컴포넌트로 앱의 최상위 컴포넌트를 감싸주어야 한다.
Client.js
import { ApolloClient } from "apollo-boost";
import { defaults, resolvers } from "./LocalState";
export default () => new ApolloClient({
uri : 'http://localhost:4000',
clientState: {
defaults,
resolvers
}
});
ApolloClient 란?
Graphql API를 접속할 수 있게 도와주는 기능으로 접속할 uri를 설정해주어야 한다.
다음으로, 위에서 생성한 ApolloClient 객체를 React에 연결해줘야 합니다. 앱 내에서 특정 React 컴포넌트만 GraphQL API 호출이 필요한 경우가 아닌 이상, 모든 React 컴포넌트에서 ApolloClient를 사용하도록 설정하는 것이 일반적입니다. index.js에서 이러한 연동처리를 완료하였다.
LocalState.js
LocalState는 브라우저 저장소를 이용하여 로그인 할 경우 토큰을 저장하고, 로그아웃 할 때 토큰을 제거하는 기능을 가진다
/**
* defaults의 용도
* localStorage에서 token을 가져와서 로그인 여부를 확인한다.
* localStorage : 기본적으로 브라우저에서 지원하는 저장소.
* 이 저장소는 application 전역에서 접근 가능. localStorage는 직접 지우기 전까지 저장된다.
*/
export const defaults = {
// key, value 형태로 데이터를 저장하고 불러온다
isLoggedIn : localStorage.getItem("token") !== null ? true : false
};
export const resolvers = {
Mutation : {
logUserIn: (_, {token}, {cache}) => {
// 토큰을 저장한다
localStorage.setItem("token", token);
// 캐시에 로그인 성공 데이터 저장
cache.writeData({
data: {
isLoggedIn : true
}
});
return null;
},
logUserOut: (_, _, { cache }) => {
// 로그아웃시 토큰 삭제
localStorage.removeItem("token");
//이건 무슨용도?
window.location.reload();
return null;
}
}
}
'프로젝트' 카테고리의 다른 글
[인스타그램클론코딩] #6.1 Header Logic part one (0) | 2020.12.09 |
---|---|
[인스타그램클론코딩] #Authrization 흐름 정리 (0) | 2020.12.06 |
[인스타그램 클론코딩] #4.2 React Router (0) | 2020.11.11 |
[인스타그램클론코딩] #5.4 requestSecret Mutation and Refactor (0) | 2020.10.28 |
[인스타그램 클론코딩] #4.1 GlobalStyle and Theme (0) | 2020.10.06 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- front
- 재테크공부
- 개발자 회고
- 부동산공부
- 깃
- docker
- 깃허브
- 월부닷컴
- 항해솔직후기
- resize
- 월급쟁이부자들
- 내년은 빡세게!!
- 폭포수
- push_back
- 열반스쿨기초반
- pop_back
- Inception
- Spring boot
- 인셉션
- 항해플러스백엔드
- 2023년
- 유즈케이스
- 도커
- 파라메터
- GIT
- Use case
- ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
- 항해플러스후기
- github
- 관계대수
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함