21 分鐘學 apollo-client 是一個系列,簡單暴力,包學包會。javascript
搭建 Apollo client 端,集成 redux
使用 apollo-client 來獲取數據
修改本地的 apollo store 數據
提供定製方案html
Apollo 其實提供了示例倉庫:node
和 Redux 的集成也有這篇文章: Integrating with Redux | Apollo React Docsreact
提及來 GitHunt 這個庫還蠻奇怪的,不一樣於其它教程通常把示例 repo 寫得比較精簡,這個 repo 搞了一堆東西來迷惑你。
其中提到了 persistgraphql
等須要後端配合的東西,徒增了配置的複雜性。webpack
你能夠先試試把上面的例子跑起來,畢竟代碼比較全,也有助於你看懂我下一章節是如何進行封裝的。
若是不行,再跟隨個人簡單步驟試試。git
下文在行號前添加 -
表示刪除的原代碼, +
表示新增的代碼。web
是的,就是從 git commit 裏複製過來的npm
npm i --save react-apollo npm i --save-dev graphql-tag
NOTE: 最近官方出了 react-apollo 2.x,但本文使用 1.x。因此檢查下你下載的版本是否是 1.x 的。redux
webpack.config.js
增長對 .gql
文件的支持
// ... extensions: ['.web.js', '.js', '.jsx', '.gql', 'graphql'], // ...
module: { rules: [ // ... { test: /\.(graphql|gql)$/, exclude: /node_modules/, loader: 'graphql-tag/loader', }, ] }
apollo/createApolloClient.js
import { ApolloClient, createNetworkInterface, } from 'react-apollo'; export default function createApolloClient() { const networkInterface = createNetworkInterface({ uri: `${yourGragqlUri}`, opts: { // fetch options credentials: 'same-origin', }, }); const client = new ApolloClient({ networkInterface, }); return client; }
apollo/index.js
import createApolloClient from './createApolloClient'; const client = createApolloClient(); export default client; export const apolloReducer = client.reducer();
rootReducer.js
+ import { apolloReducer as apollo } from './apollo'; let reducersList = { // ... apollo, };
App.jsx
- import { Provider } from 'react-redux'; + import { ApolloProvider } from 'react-apollo'; import store from './configureStore'; + import client from './apollo'; // ... - <Provider store={store}> + <ApolloProvider store={store} client={client}> { /* ... */ } - </Provider> + </ApolloProvider>
至此,你就搭建好了最簡單的 ApolloClient。