๋ชฉ์ฐจ
- Introduction
- Installation
- main.js
- webpack gql file
- apollo composable
- Conclusion
- Reference
๐ Introduction
์๋ ํ์ธ์. ์ค๋์ apollo๋ฅผ vue3์ ํ๋ฒ ์ ์ฉํด๋ณด๋ ํฌ์คํ ์ ๋๋ค. ํด๋น ์ฝ๋๋ ์ฌ๊ธฐ์ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
๐ Installation
npm install @apollo/client graphql react @vue/apollo-composable graphql-tag
์ฌ๊ธฐ์ ์ ๊ฐ์๊ธฐ react๊ฐ ํ์ด๋์ค๋ ์ถ์ผ์๊ฒ ์ง๋ง...๐ญ ๋ค react๋ฅผ ์ค์น๋ฅผ ํด์ค์ผํฉ๋๋ค. ํฌ์... apollo client์ ์๋ง.. react๊ฐ ์๊ณ .. ๋ ์์ธํ๊ฑด... ์๋ตํ๊ฒ ์ต๋๋ค.
๐ main.js
// main.js
import { createApp, provide, h } from 'vue'
import App from './App.vue'
import { ApolloClient, InMemoryCache } from '@apollo/client';
import { DefaultApolloClient } from '@vue/apollo-composable';
import store from './store'
const defaultClient = new ApolloClient({
// ์๋ฒ์ uri๋ฅผ ์ง์ ์ ํด์ฃผ๊ฒ ๋ฉ๋๋ค.
uri: 'https://rickandmortyapi.com/graphql/',
cache: new InMemoryCache()
});
createApp({
setup() {
// provide๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์์ component๋ค๋ Apollo์ ์ ๊ทผ์ ํ ์ ์์ต๋๋ค.
provide(DefaultApolloClient, defaultClient);
},
render() {
return h(App);
}
}).use(store).mount('#app')
๐ webpack gql file
graphql file์ ์ด์ฉํ๊ธฐ ์ํด์๋ webpack ์ค์ ์ ํด์ค์ผํฉ๋๋ค.
module.exports = {
chainWebpack: config => {
config.module
.rule('graphql')
.test(/\.(graphql|gql)$/)
.use('graphql-tag/loader')
.loader('graphql-tag/loader')
.end();
}
}
๐ apollo composable
apollo-composable์ ์ด์ฉํด์ ์ฝ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ์ ์์ด์. useQuery์ useReuslt๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
<script>
import { useQuery, useResult } from "@vue/apollo-composable";
import allCharacters from "./graphql/allCharacters.query.gql";
export default {
name: "App",
setup() {
// result ๋ฟ ์๋๋ผ loading๊ณผ error๋ ์์ด์ ๋๋ฌด ํธ๋ฆฌํด์. ๋ ๋ง์ ํจ์๊ฐ ์์ง๋ง ์์ธํ๊ฑด ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
const { result, loading, error, refetch } = useQuery(
allCharacters
);
// result๋ฅผ computed๋ก ์นํ ํด์ฃผ๋ useResult ์
๋๋ค. ๋๋ฒ ์งธ ์ธ์๋ก ๊ธฐ๋ณธ ๊ฐ์ ์ค์ ํ ์ ์์ด์.
const characters = useResult(
result,
null,
(data) => data.characters.results
);
return {
result,
loading,
error,
refetch,
characters,
};
},
};
</script>
๐ Conclusion
์ด๋ ๊ฒ ํ๋ฒ vue์์ apollo๋ฅผ ์ฌ์ฉํด๋ดค์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ์ ์๊พธ ์ปค๋ฎค๋ํฐ์์ ์๊พธ gql์ ๋๋จํจ์ ์ฐฌ์ํ๋์ง ์ ์ ์๋ ๋๋ชฉ๋ค์ด ์๋ค์. ๋๋ฌด ํธ๋ฆฌํ๊ณ ์ข์๊ฑฐ ๊ฐ์ต๋๋ค. ์์ผ๋ก ๊ฐ์ธ ํ๋ก์ ํธ๋ ๋ฌด์กฐ๊ฑด gql์ ์ฌ์ฉํ ๊ฑฐ ๊ฐ์์. ์ข๋ ์ฌ์ฉํด๋ด์ผ ํ๊ฒ ์ง๋ง rest๋ฅผ ์๋ฒฝํ๊ฒ ๋์ฒดํ ์ ์์ ๊ฑฐ๋ผ๋ ์๊ฐ์ด ๋๋ค์. ๊ทธ๋ฆฌ๊ณ vuex๋ฅผ ์ด์ ๊ตณ์ด ์จ์ผํ๋๊ฐ? ๋ผ๋ ์๋ฌธ๋ ๋ง์ด ๋๋ค์. ๋ฌผ๋ก ํน์ ํ ์ํฉ์์๋ vuex๋ฅผ ๋ถ๋ช ์ฌ์ฉํ๊ฒ ์ง๋ง ๋๋ถ๋ถ์ ๊ฒ๋ค์ด vuex๋ฅผ ๋์ฒด ํ ์ ์์๊ฑฐ ๊ฐ๋ค๋ ์๊ฐ์ด ๋๋ค์. ๊ทธ๋ผ ๋ค์ ํฌ์คํ ์์ ๋ง๋์ ์๋ ~
๐ Reference
'Graphql_Apollo' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ํํ graphql & apollo ๊ฐ์ข - Apollo ์๋ฒ ๊ตฌ์ถ (0) | 2021.06.28 |
---|---|
Apollo - nodejs + mongo ์๋ฒ ๋ง๋ค๊ธฐ (0) | 2020.12.20 |