21 分鐘學 apollo-client 系列:簡單搭建

21 分鐘學 apollo-client 是一個系列,簡單暴力,包學包會。javascript

搭建 Apollo client 端,集成 redux
使用 apollo-client 來獲取數據
修改本地的 apollo store 數據
提供定製方案html

寫入 store 的失敗緣由分析和解決方案java

在 Redux 基礎上添加 Apollo

其它教程

Apollo 其實提供了示例倉庫:node

和 Redux 的集成也有這篇文章: Integrating with Redux | Apollo React Docsreact

提及來 GitHunt 這個庫還蠻奇怪的,不一樣於其它教程通常把示例 repo 寫得比較精簡,這個 repo 搞了一堆東西來迷惑你。
其中提到了 persistgraphql 等須要後端配合的東西,徒增了配置的複雜性。webpack

你能夠先試試把上面的例子跑起來,畢竟代碼比較全,也有助於你看懂我下一章節是如何進行封裝的。
若是不行,再跟隨個人簡單步驟試試。git

環境要求

  • 請確保你已經搭建了本身的 Redux 環境
  • node >= 6.10
  • npm >= 3.10
  • react: 15 ~ 16
  • redux: 3.x
  • webpack: 2.x

下文在行號前添加 - 表示刪除的原代碼, + 表示新增的代碼。web

是的,就是從 git commit 裏複製過來的npm

install package

npm i --save react-apollo
npm i --save-dev graphql-tag

NOTE: 最近官方出了 react-apollo 2.x,但本文使用 1.x。因此檢查下你下載的版本是否是 1.x 的。redux

update webpack.config.js

增長對 .gql 文件的支持

// ...
extensions: ['.web.js', '.js', '.jsx', '.gql', 'graphql'],
// ...
module: {
    rules: [
        // ...
        {
            test: /\.(graphql|gql)$/,
            exclude: /node_modules/,
            loader: 'graphql-tag/loader',
        },
    ]
}

建立 client

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();

添加 apollo reducer

rootReducer.js

+ import { apolloReducer as apollo } from './apollo';

let reducersList = {
    // ...
    apollo,
};

使用 Apollo 的 Provider

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。

固然,生產環境不能止步於此。若是你是新手,那麼請繼續看如何簡單使用;或者進一步的定製

相關文章
相關標籤/搜索