React 리액트 - Redux 대체해서 ApolloClient 써보기
1. 클라이언트 state에 들어갈 디폴트(스테이트)와 리소버 정의
// defaults는 Graphql문법이 아닌, state 개념이다.
export const defaults = {
isLoggedIn: Boolean(localStorage.getItem("token")) || false
};
//resolvers의 세번쨰 인자가 의문이네... 두번째 인자도, 기본 리소버랑 다른 매커니즘인듯
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;
}
}
};
2. ApolloClient에 clientState 넣기
import ApolloClient from "apollo-boost";
import { defaults, resolvers } from "./LocalState";
export default new ApolloClient({
uri: "http://localhost:4000",
clientState: {
defaults,
resolvers
}
});
3. @client를 통해 clientState임을 알려
const QUERY = gql`
{
isLoggedIn @client
}
`;
4. 아폴로 훅을 통해. 데이터를 받아옴.
import { useQuery } from "react-apollo-hooks";
export default () => {
const {
data: { isLoggedIn }
} = useQuery(QUERY);
return (
<ThemeProvider theme={Theme}>
<Router isLoggedIn={isLoggedIn} />
</ThemeProvider>
);
};
DOS IMPACT - WEB Developer
KIM DO YOUNG
WEB : REACT JS | REACT NATIVE | GraphQL PRISMA
'React JS > Lecture' 카테고리의 다른 글
React - Hook 리액트 훅 사용법 정리 (2) useQuery (0) | 2020.02.03 |
---|---|
React - Hook 리액트 훅 사용법 정리 (1) useState,useRef,createRef (0) | 2020.02.02 |
React Grapqhl 아폴로를 이용한 클라이언트 환경 만들기. (0) | 2020.02.01 |
React J N 스타일 컴포넌트 5가지 꿀팁 (0) | 2020.02.01 |
React 폰트 어썸 아이콘 사용하기 (0) | 2020.01.31 |