ํ์ผ,
apollo-link-rest๋ฅผ ์ฌ์ฉํ ๋๋ง๋ค ๋์ผํ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. Apollo devtools์์ GraphiQL์ ์ด๋ฉด ํญ์ "TypeError : forward is not a function"์ค๋ฅ๊ฐ ํ์๋ฉ๋๋ค. ์ค๋ฅ์ ์ ์ฒด ํ ์คํธ :
{
"errors": [
{
"message": "forward is not a function",
"locations": [
"TypeError: forward is not a function\n at RestLink../node_modules/apollo-link-rest/bundle.umd.js.RestLink.request (http://localhost:3000/static/js/bundle.js:5566:24)\n at http://localhost:3000/static/js/bundle.js:5746:33\n at ApolloLink.request (http://localhost:3000/static/js/bundle.js:2602:20)\n at ApolloLink.request (http://localhost:3000/static/js/bundle.js:5745:31)\n at chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:3681\n at e.request (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:38654)\n at chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:3681\n at e.request (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:38421)\n at chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:3681\n at chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:38085\n at new s (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:4855)\n at l.subscribe (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:6185)\n at n.<anonymous> (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:38914)\n at n.t.emit (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:52786)\n at chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:19519\n at n (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:36148)"
]
}
]
}
@rest ์ง์๋ฌธ์ ์ฌ์ฉํ ์ฟผ๋ฆฌ ๋ฐ ๋ณํ์ ์ ๋๋ก ์๋ํ๋ ๊ฒ ๊ฐ๊ณ ๋ค๋ฅธ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฏ๋ก ์์ ํ ์ฐจ๋จ๋๋ ๋ฌธ์ ๋ ์๋์ง๋ง ์ ์ฌ์ ์ผ๋ก ๋ค๋ฅธ Apollo Client ๊ธฐ๋ฅ์ ์ํฅ์์ค๋๋ค. ์๋ฅผ ๋ค์ด @client ์ง์๋ฌธ์ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด ์๋ํ์ง ์์ต๋๋ค. ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค (์ค๋ฅ ํ์ด๋ก๋์
์ธ ๊ฐ์ง ์์ react-apollo ํ๋ก์ ํธ (๋จ์, ๊ณ ๊ธ, typescript)๋ฅผ ๋ณต์ ํ๋๋ฐ ์ธ ๊ฐ์ง ๋ชจ๋์ ๋์ผํ ์ค๋ฅ๊ฐ ๋ํ๋ฉ๋๋ค. # 121์์ด ๋ฌธ์ ๋ฅผ ์ธ๊ธํ์ง๋ง ํด๊ฒฐ๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ํฌํจ ๋ ์์ ์ฌํญ์ ๋ณ๋์ "๊ฐ์ ธ ์ค๊ธฐ ์คํจ"๋ฒ๊ทธ์ ๋ํ ๊ฒ์ ๋๋ค. ์ ์ฌ์ ์ธ ์์ธ์ผ๋ก @rest ๋๋ @client ์ง์๋ฌธ์ด ๋๋ฝ ๋์๋ค๋ ์ธ๊ธ๋ ์์ง๋ง ์ธ๊ธํ๋ฏ์ด ์ด๊ฒ์ ์ํ ํ๋ก์ ํธ์ ๋ด ํ๋ก์ ํธ์์๋ ๋ฐ์ํ๋ฏ๋ก ๋๋ฝ ๋ ์ง์๋ฌธ์ด ๋ฒ์ธ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
์ฌํํ๋ ค๋ฉด ์์ ํ๋ก์ ํธ๋ฅผ ๋ณต์ ํ๊ณ Chrome์์ Apollo ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ์ค์น ๋ฐ ์์ํ๊ณ ์ฝ๋ ๋ค (์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ ํ์ฌ ๋ฒ์ ์ 70.0.3538.77์ ๋๋ค).
์ด๊ฒ์ ๋ด ์ฃผ์ ์ ๊ฐ์ฌํ๊ณ , ํจํค์ง๋ฅผ ์ฌ๋ํ๊ณ , ๋งค์ฐ ์ ์ฉํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ญ์์ค!
์ ๋ GraphIQL์ด apollo-link-state / apollo-link-rest๋ฅผ ์ง์ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋งํฌ๋ฅผ ์ง์ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์๋ํ๋ ์๊ฐ ์์ต๋๊น?
๋ฌผ๋ก Apollo ๊ฐ๋ฐ ๋๊ตฌ์ GraphiQL์ด ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. JSONPlaceholder API๋ฅผ ์ฌ์ฉํ์ฌ https://jsonplaceholder.typicode.com์ผ๋ก ์ค์ -์ฟผ๋ฆฌ๊ฐ ์คํ๋๊ธฐ ์ ์ ์ฒ์์ ์ป์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ชจ๋ ์ฌ์ฉ์๋ฅผ ๊ฐ์ ธ ์ค๊ธฐ ์ํด ์ฟผ๋ฆฌ๋ฅผ ์คํ ํ ํ :
๋๋ "๊ฐ๋จํ"์์ ํ๋ก์ ํธ :
๋ด๊ฐ ์์ ์ฐจ๋ฆฐ ๋ ๋ค๋ฅธ ์ ์ "์บ์์์ ์ฝ๊ธฐ"์ต์ ์ด JSONPlaceholder API๋ก ์์ฑ ๋ ์ ํญ๋ชฉ์์ ์๋ํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. POST ๋ณํ์ ์บ์์ ์ ํญ๋ชฉ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ธฐ๋กํ์ง๋ง ํ์ ์ฟผ๋ฆฌ๋ "์บ์์์ ์ฝ๊ธฐ"๋ฅผ ์ ํํ ๊ฒฝ์ฐ์๋ ์๊ฒฉ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์๋ํฉ๋๋ค. ์ ํญ๋ชฉ์ด ์ค์ ๋ก ์์ฑ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์์๋๋ก ์๊ฒฉ ๋์ ์์ null์ ๋ฐํํ์ง๋ง ์บ์์ ์์ฑ๋๋ฏ๋ก "์บ์์์ ์ฝ๊ธฐ"๊ฐ ๋ฐํํด์ผํฉ๋๊น? ์ด๊ฒ์ ์๋ง๋ apollo-link-rest์ ๊ด๋ จ์ด ์์ผ๋ฉฐ์ด ๋ฌธ์ ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋์ง ๋ง ์ฌ์ ํ ํฅ๋ฏธ ๋กญ์ต๋๋ค.
GraphiQL, forward is not a function
์์ ๋์ผํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. cache
์ด์ธ์ ๋ชจ๋ ๊ฒ์ด ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด ๋ ์๋ค์ ๋ํ ๋ชจ๋ ์ ๋ฐ์ดํธ, ๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์๋ค :(
@cstoddart ์บ์ ํจ๋์ด ๋น์ด ์์ต๋๋ค. ๋ง์ต๋๊น?
๋๊ตฌ๋ ์ง devtools์์ด ์บ์๋ฅผ ๋ณด๋ ๋ฐฉ๋ฒ์ ์๊ณ ์์ต๋๊น?
์ ๋ ๊ฐ์ ์ผ์ ๊ฒช๊ณ ์์ต๋๋ค. @cgatian ์, ์บ์ ํจ๋์ด ๋น์ด ์์ต๋๋ค.
์ด๋ฌํ ํ์์ด ์ค๋ซ๋์ ๋ฐ์ํ๋ฉด ์ํด๋ก์ ํด์ฒด์ธ์ ์์ฉํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. apollo-link-rest๋ ์ฌ์ ํ ํ๋ฐํ ์์ ์ค์ ๋๊น?
@heymanhn- ์ ApolloLinkRest๋ ์ ๊ทน์ ์ผ๋ก ๊ฐ๋ฐ๋๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์คํ ์์ค์ ๋๋ค. PR์ ํ ์คํธํ๊ณ ์ ๋ฌํ๋ ๋ฐ ๋์์ ๋๋ฆฌ๊ฒ ์ต๋๋ค.ํ์ง๋ง ApolloDevTools์ ๋ํ ๊ฒฝํ์ด ์์ต๋๋ค.
์ฝ๋๋ฒ ์ด์ค์ ํธํ๋๋ ๋ฐ ํ์ํ ๊ฒ์ด ๋ฌด์์ธ์ง ํ์ ํ๊ธฐ ์ํด ์ฝ๋๋ฒ ์ด์ค์ ๋ฐ์ด ๋ค๊ฑฐ๋ ๊ธฐ๊บผ์ด ์ฐธ์ฌํ ์ฌ๋์ด ํ์ํฉ๋๋ค. ๋๋ ๋น์ ์๊ฒ ๋ฌด์์ด ๋น ์ก๋์ง ์์ ๋ด๋๋ก ๋์ ํ๊ณ ๋น์ ์ ๊ธฐ์ฌ๋ฅผ ์ง์ํ๊ณ ์ถ์ต๋๋ค!
๋๋ ๋์๋ ์ํ๋ ๊ธฐ๋ฅ์ ๋์ด ์ ์ ํ์์ด๋ค๋ผ๊ณ ๋งํ๊ณ ์ถ์ง๋ง, ๊ทธ๋์ ๊ทธ ์ํด๋ก ๋งํฌ๊ฐ-๋๋จธ์ง๋ ์ด์ ๊น์ง ApolloDevTools๊ณผ ํ๋ ฅ ์๊ณ ํ์ง ์๋ ๊ฒ์ด, ๋ถ๋ช ํํ๊ณ ์ํฉ๋๋ค.
๋ํ ๊ฐ์ธ์ ์ผ๋ก React-Native์ ํจ๊ป apollo-link-rest๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ 1 ๋ ์ ์ ApolloDevTools๋ React-Native์ ํธํ๋์ง ์์์ต๋๋ค.
๊ทธ๋ค์ ๊ทธ ์ดํ๋ก ๊ทธ๊ฒ์ ๊ณ ์ณค๋ค ๊ณ ๋ฐํํ์ง๋ง ์ฐ๋ฆฌ ํ์ ๋ฐ์ ๋ค์ดํฐ๋ธ ํ๋ก์ ํธ๋ฅผ ์ํด ApolloDevTools๋ฅผ ํ์ฑํ ํ ์ ์์๊ธฐ ๋๋ฌธ์ ๋ฌด์์ด ์๋ชป๋์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์๋
ํ์ธ์! ์ด ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ์์ธ์ ์กฐ๊ธ ์ดํด๋ณผ ์์์์ต๋๋ค.
์ด ์์
์ apollo-client-devtools์ ์ํด ํธ์ถ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ ๋์ฐฉํ๋ฉด forward
๋ ์ ์๋์ง ์์ต๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด PR์ ๋ง๋ค ๊ฒ์
๋๋ค. !isRestQuery
์ํ๋ฅผ !isRestQuery && forward
๋ณ๊ฒฝํ์ ๋ ์์ ์ค๋ฅ๋ฅผ ์์จ ์์์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๋ก์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
Error: Type Query must define one or more fields.
at t.assertValidSchema (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:258433)
at O (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:272246)
at k (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:271277)
at t.execute (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:270565)
at t.v (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:806774)
at t.n.emit (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:394893)
at chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:517657
์ด ๋ฌธ์ ๋ฅผ ํ์ธ / ๋๋ฒ๊ทธํ๋ ๋ฐ ์ฌ์ฉํ ์์ ์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. https://github.com/Hilaryous/simple-react-app/tree/apollo-link-rest-example.
์ด ๋์๊ด์ ๋ํ ๋ชจ๋ ์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ด๋ค ์ ์ผ๋ก๋ ๋์์ ์ค ์ ์๋ค๋ฉด ๊ธฐ์ฉ๋๋ค.
๋๋ ์ต๊ทผ์ ์ด๊ฒ์ ์คํํ๊ณ ์์ผ๋ฉฐ ๋ด ๊ฒฝ์ฐ IntrospectionQuery์ ๋ํ ์ค๋ฅ๋ฅผ ์ขํ์ต๋๋ค. ๋ฌธ์ ๋ apollo-client์ apollo-link-rest ๋ง ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก ์บ์ ์คํค๋ง (์๋ ๊ฒฝ์ฐ)๋ฅผ ์ ์ธํ๊ณ ์๋ฒ ๋ ์คํค๋ง๊ฐ ์์ต๋๋ค. ์ฐจ๋ก๋ก ๋ด apollo devtools๋ ๋น์ด ์์ต๋๋ค. ์ฌ๊ธฐ์ ์์ ์ด ๋ฌด์์ธ์ง ์ ํํ ์ ์๋ ์์ง๋ง ๋ชจ๋ ๊ฒ์ด ํ ์ง์ ์์ ์๋ํ์ต๋๋ค.
๋๋ ์ต๊ทผ์ ์ด๊ฒ์ ์คํํ๊ณ ์์ผ๋ฉฐ ๋ด ๊ฒฝ์ฐ IntrospectionQuery์ ๋ํ ์ค๋ฅ๋ฅผ ์ขํ์ต๋๋ค. ๋ฌธ์ ๋ apollo-client์ apollo-link-rest ๋ง ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก ์บ์ ์คํค๋ง (์๋ ๊ฒฝ์ฐ)๋ฅผ ์ ์ธํ๊ณ ์๋ฒ ๋ ์คํค๋ง๊ฐ ์์ต๋๋ค. ์ฐจ๋ก๋ก ๋ด apollo devtools๋ ๋น์ด ์์ต๋๋ค. ์ฌ๊ธฐ์ ์์ ์ด ๋ฌด์์ธ์ง ์ ํํ ์ ์๋ ์์ง๋ง ๋ชจ๋ ๊ฒ์ด ํ ์ง์ ์์ ์๋ํ์ต๋๋ค.
์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง
ApolloDevTools๊ฐ ์ง๋ ๋ชฉ์์ผ์ React Native Debugger์์ apollo-link-state, apollo-link-Rest์ ํจ๊ป ์๋ํ๋ ๊ฒ์ ๋ณด์์ต๋๋ค. ์ด๊ฒ์ด ์ฌ์ ํ ํ์ฑ ๋ฌธ์ ๋ผ๊ณ ํ์ ํฉ๋๊น? @ edgars-sirokovs์ ์ด๋ค ๋ฒ์ ์ด ์์ต๋๊น?
ApolloDevTools๊ฐ ์ง๋ ๋ชฉ์์ผ์ React Native Debugger์์ apollo-link-state, apollo-link-Rest์ ํจ๊ป ์๋ํ๋ ๊ฒ์ ๋ณด์์ต๋๋ค. ์ด๊ฒ์ด ์ฌ์ ํ ํ์ฑ ๋ฌธ์ ๋ผ๊ณ ํ์ ํฉ๋๊น? @ edgars-sirokovs์ ์ด๋ค ๋ฒ์ ์ด ์์ต๋๊น?
@fbartho 2.2.4
@fbartho๋ ๋ฐฉ๊ธ ๋ค์ ํ์ธํ์ต๋๋ค. ์ ์ด๋ ๋ ์ด์ ๋น์ด ์์ง ์์ต๋๋ค.
๊ทธ๋๋ ์ฌ์ ํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค-์บ์๋ณด๊ธฐ๋ฅผ ์คํฌ๋กค ํ ์์๊ณ ๋ฌธ์ ํ์๊ธฐ์ ์คํค๋ง๊ฐ ํ์๋์ง ์์ต๋๋ค ( typeDefs
๋ฅผ ํตํด ์ ๋ฌ ๋ ํด๋ผ์ด์ธํธ ์ธก ์คํค๋ง
๋ฌธ์ ํ์๊ธฐ๊ฐ apollo-link-rest๋ฅผ ์ง์ํ๊ธฐ ์ํด ๋ฌด์์ ํ์๋กํ๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ํ ์ผ์ด ์๊ฑฐ๋ ์ ๋๋ก ์๋ํ์ง ์์ ๊ฒฝ์ฐ ๋๋ผ์ง ์์ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์์ ์์ ์ด ํ์ํ ๊ฒฝ์ฐ PR ์๋ฝ!
์บ์ ๋ทฐ๋ฅผ ์คํฌ๋กคํ๋ ๊ฒ์ ํ์คํ ApolloDevTools ์ฝ๋์ ๋ฒ๊ทธ์ฒ๋ผ ๋ณด์ ๋๋ค.
๊ทธ๋ฌ๋ ๋๋ ๋น์ ์ด @ edgars-sirokovs๋ฅผ ๋ฐ์ ์์ผ์ ๊ธฐ์ฉ๋๋ค!
ApolloDevTools๊ฐ ์ง๋ ๋ชฉ์์ผ์ React Native Debugger์์ apollo-link-state, apollo-link-Rest์ ํจ๊ป ์๋ํ๋ ๊ฒ์ ๋ณด์์ต๋๋ค. ์ด๊ฒ์ด ์ฌ์ ํ ํ์ฑ ๋ฌธ์ ๋ผ๊ณ ํ์ ํฉ๋๊น? @ edgars-sirokovs์ ์ด๋ค ๋ฒ์ ์ด ์์ต๋๊น?
simple
ํ๋ก์ ํธ๋ก ํ
์คํธํ๋๋ฐ ์๋ํ์ง ์๊ณ Apollo DevTools ํญ์ ์ฌ์ฉํ ์ ์์ง๋ง ํญ์ ๋น์ด ์๊ณ ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. https://github.com/apollographql/apollo-link-rest/tree/master/examples/simple
@fbartho ๋๋ react-native-debugger๋ก ๋ค์ดํฐ๋ธ ๋ฐ์์์ ์์ ํ๋ ํ๋ก์ ํธ์์ ๋๊ฐ์ ์์ ์ ์ํํ์ผ๋ฉฐ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ค์ ๋๋ ์ฌ์ฉ์ค์ธ ๋ฒ์ ์ ๊ณต์ ํ ์ ์์ต๋๊น?
์ค๋ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ด ์๋ํ๋ค๋ ๊ฒ์ ๋ฐฐ์ ์ง ๋ง GraphiQL ํญ์ ์๋๊ณ ๋ค๋ฅธ ํญ๋ง : https://github.com/apollographql/apollo-client-devtools/issues/227
์ด ๋์ผํ ๋ฌธ์ ๋ก ๋ณด์ด๋ ๊ฒ ๋๋ฌธ์ devtools GraphiQL์์ ๋ก์ปฌ ์คํค๋ง Docs
์ ์ฝ์ ์ ์์ต๋๋ค.
์ด ๋ด๋ถ ๊ฒ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ฉด ์๋ต ํจ๋์ [object Object]
๊ฐ ํ์๋๊ณ ์ฝ์ ๋ณด๊ณ ์ [Network error]: TypeError: forward is not a function
{
__schema {
types {
name
}
}
}
๋ด ํด๋ผ์ด์ธํธ์๋ graphql ์๋ฒ๊ฐ ์์ต๋๋ค.
import { ApolloClient } from 'apollo-client';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { persistCache } from 'apollo-cache-persist';
import localForage from 'localforage';
import typeDefs from './schema.graphql';
import { resolvers } from './resolvers';
import { link } from './link';
import { initialState } from './initialState';
export let client;
export async function createApolloClient() {
const cache = new InMemoryCache();
await persistCache({ cache, storage: localForage, serialize: false });
client = new ApolloClient({ cache, link, resolvers, typeDefs });
window.__APOLLO_CLIENT__ = client;
cache.writeData({ data: initialState });
return client;
}
์ด๊ฒ์ด ์์ ๋ชจ๋ ์ฌ์ฉ์์ฒ๋ผ ์ฌ์ฉ ์ฌ๋ก์ ์ ํํ ๊ด๋ จ์ด ์๋์ง ํ์คํ์ง ์์ง๋ง ๊ฒฐ๊ตญ ํด๊ฒฐ ํ ์ค๋ฅ๋ก ์ฐพ์ ์์๋ ์ ์ผํ ๊ด๋ จ ๊ฒ์ ๊ฒฐ๊ณผ์ ๋๋ค.
๋ด๊ฐ ์ถ๊ฐํ๋ ค๊ณ ํ ๋ ๋๋ ์ต๊ทผ์์ด ์ค๋ฅ๋ก ์คํ apollo-link-rest
์ฌ์ฉํ์ฌ ๊ธฐ์กด ์์ฉ ํ๋ก๊ทธ๋จ์ @apollo/client
.
tl; dr ๋ฌธ์ ๋ uri
๋ฐ link
๋ฅผ ์๋ก์ด ApolloCient
์ ์ ํ ๋ ์ต์
๋งค๊ฐ ๋ณ์๋ก ์ ๋ฌํ ์ ์๋ค๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค. ๋์ , ๋น์ ์ ์ ๊ฑฐํด์ผํฉ๋๋ค uri
๋งค๊ฐ ๋ณ์๋ฅผ ๋ง๋ค HttpLink
์ฌ์ฉ createHttpLink
์ฌ์ฉํ์ฌ ๋ค์๊ณผ from()
๋ฐ๋ ๋น์ ์ ์ฐ๊ฒฐํ๊ณ ๊ฒฐํฉํ๋ link
์ต์
๋งค๊ฐ ๋ณ์.
๋๋จธ์ง ๋งํฌ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ ์ ๋ด ์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
import { ApolloClient, InMemoryCache } from '@apollo/client';
const client = new ApolloClient({
uri: '/api/graphql',
cache: new InMemoryCache(),
});
๋ฌธ์๋ฅผ ์ฝ์ผ๋ฉด์ ์๋ก์ด RestLink
๋ฅผ ์ ์ํ๊ณ ์ถ๊ฐ link
๋งค๊ฐ ๋ณ์๋ฅผ ๋ค์๊ณผ ๊ฐ์ ์ต์
์ ์ถ๊ฐํ์ฌ ๋๋จธ์ง ๋งํฌ๋ฅผ ์ถ๊ฐ ํ ์ ์์ด์ผํ๋ค๋ ์ธ์์ ๋ฐ์์ต๋๋ค.
import { ApolloClient, InMemoryCache } from '@apollo/client';
import { RestLink } from 'apollo-link-rest';
const restLink = new RestLink({
uri: '/api',
});
const client = new ApolloClient({
uri: '/api/graphql',
cache: new InMemoryCache(),
link: restLink,
});
๊ทธ๋ฌ๋์ด ๊ตฌ์ฑ์ผ๋ก ์ธํด TypeError: forward is not a function
์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ ํด๋ผ์ด์ธํธ๊ฐ ๋ ์ด์ ์๋ํ์ง ์์ต๋๋ค.
๋งํฌ์ ๋ํ ๋ฌธ์๋ฅผ ๋ ์ฝ์ด ๋ณธ ํ, uri
๋ฐ link
์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค (๋ช
์ ์ ์ผ๋ก ์ธ๊ธ ๋ ๋ด์ฉ์ ๋ณผ ์๋ ์์ผ๋ฉฐ ์๋ชป๋ ๊ฒฝ์ฐ๋์์ ์ ์์). ๋์์ ApolloClient
์ ์์ link
์ต์
๋งค๊ฐ ๋ณ์. ์ด ์๋ก์ด ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ I ์ ๊ฑฐํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค uri
๋งค๊ฐ ๋ณ์ ๋ฐ ๋ง๋๋ ๋์ HttpLink
๋ด๊ฐ ๊ทธ๋์ ๊ฒฐํฉ ๋ ๊ฒ์ RestLink
์ฌ์ฉํ์ฌ from()
์ ๋ชจ๋ ๊ฒ์ด ๋ง์นจ๋ด ์๋ํ์ต๋๋ค ( ๋ฌธ์ ์ ๋ฐ๋ผ RestLink
๊ฐ HttpLink
์์ ์์ผํฉ๋๋ค) :
import {
ApolloClient, InMemoryCache, from, createHttpLink,
} from '@apollo/client';
import { RestLink } from 'apollo-link-rest';
const httpLink = createHttpLink({
uri: '/api/graphql',
});
const restLink = new RestLink({
uri: '/api',
});
const client = new ApolloClient({
cache: new InMemoryCache(),
link: from([restLink, httpLink]),
});
๊ฐ์ฌํฉ๋๋ค @crbanman ๋น์ ์ด ๋ด ํ๋ฃจ๋ฅผ ๊ตฌํ์ต๋๋ค! ๐ฏ
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ ํ์ธ์! ์ด ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ์์ธ์ ์กฐ๊ธ ์ดํด๋ณผ ์์์์ต๋๋ค.
์ด ์์ ์ apollo-client-devtools์ ์ํด ํธ์ถ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ ๋์ฐฉํ๋ฉด
forward
๋ ์ ์๋์ง ์์ต๋๋ค.์ด ๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด PR์ ๋ง๋ค ๊ฒ์ ๋๋ค.
!isRestQuery
์ํ๋ฅผ!isRestQuery && forward
๋ณ๊ฒฝํ์ ๋ ์์ ์ค๋ฅ๋ฅผ ์์จ ์์์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๋ก์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.์ด ๋ฌธ์ ๋ฅผ ํ์ธ / ๋๋ฒ๊ทธํ๋ ๋ฐ ์ฌ์ฉํ ์์ ์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. https://github.com/Hilaryous/simple-react-app/tree/apollo-link-rest-example.
์ด ๋์๊ด์ ๋ํ ๋ชจ๋ ์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ด๋ค ์ ์ผ๋ก๋ ๋์์ ์ค ์ ์๋ค๋ฉด ๊ธฐ์ฉ๋๋ค.