成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

21 分鐘學(xué) apollo-client 系列:擴(kuò)展 ApolloClient 的 api

levy9527 / 1103人閱讀

摘要:分鐘學(xué)是一個系列,簡單暴力,包學(xué)包會。那怎么辦呢本章就教你非常簡單地實現(xiàn)擴(kuò)展的。我們可以借鑒的的寫法,為的實例添加一些自己的方法。更重要的是,也會有的效果,上一個的輸出會成為下一個的輸入,便于組合。

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

搭建 Apollo client 端,集成 redux
使用 apollo-client 來獲取數(shù)據(jù)
修改本地的 apollo store 數(shù)據(jù)
提供定制方案

請求攔截

封裝修改 client 的 api

apollo store 存儲細(xì)節(jié)
寫入 store 的失敗原因分析和解決方案

apollo 的很多 api 都丑得慘絕人寰,比如 readQuerywriteQuery,絕對會讓你寫很多垃圾代碼。
但你又不能去改源碼,給官方提了 pr 產(chǎn)品經(jīng)理又等不起你。那怎么辦呢?

本章就教你非常簡單地實現(xiàn)擴(kuò)展 client 的 api。

我們可以借鑒 Redux 的 enhancer 的寫法,為 apollo 的 client 實例添加一些自己的方法。

enhancers.js

const enhancers = [
    log,
];

export default function applyEnhancers(client) {
    // 更函數(shù)式的寫法是把 enhancers 也作為參數(shù)傳進(jìn)來,但是我需要的 enhancer 比較少,做此精簡
    return enhancers.reduce(
        (result, enhancer) => enhancer(result),
        client
    );
}

// --- enhancers ---
function log(client) {
    client.log = (...args) => {
        console.log(...args);
    };

    return client;
}

enhancer 的本質(zhì)就是接收一個 client,對其進(jìn)行一些修改,再返回一個 client。所以對 client applyEnhancers 的結(jié)果還是一個 client。
這看起來和直接修改 client 沒區(qū)別,不過是把每一個修改,都多帶帶寫成一個 enhancer ,比起寫在一個巨型函數(shù)來說,這樣更便于維護(hù)。
更重要的是,applyEnhancers 也會有 pipe 的效果,上一個 enhancer 的輸出會成為下一個 enhancer 的輸入,便于組合。

然后我們只需要在前面的基礎(chǔ)上

createApolloCLient.js

import applyEnhancers from "./enhancers";

export default function createApolloCLient() {
    const client = ....; // 可以參看以前的章節(jié)查看詳細(xì)的代碼
    return applyEnhancers(client);
}

非常簡單吧!

在后面的章節(jié)里,你會看到我是如何使用 enhancer 封裝 readQuery + writeQuery 為一個 api 的。








文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/91922.html

相關(guān)文章

  • 21 分鐘學(xué) apollo-client 系列:請求攔截和 FragmentMatcher

    摘要:分鐘學(xué)是一個系列,簡單暴力,包學(xué)包會。接管了請求和狀態(tài)管理。一般在生產(chǎn)環(huán)境中,我們通常還希望做權(quán)限驗證請求攔截等事務(wù)處理。 21 分鐘學(xué) apollo-client 是一個系列,簡單暴力,包學(xué)包會。 搭建 Apollo client 端,集成 redux使用 apollo-client 來獲取數(shù)據(jù)修改本地的 apollo store 數(shù)據(jù)提供定制方案 請求攔截 封裝修改 clie...

    Eastboat 評論0 收藏0
  • 21 分鐘學(xué) apollo-client 系列:簡單搭建

    摘要:分鐘學(xué)是一個系列,簡單暴力,包學(xué)包會。其中提到了等需要后端配合的東西,徒增了配置的復(fù)雜性。如果不行,再跟隨我的簡單步驟試試。環(huán)境要求請確保你已經(jīng)搭建了自己的環(huán)境下文在行號前添加表示刪除的原代碼,表示新增的代碼。 21 分鐘學(xué) apollo-client 是一個系列,簡單暴力,包學(xué)包會。 搭建 Apollo client 端,集成 redux使用 apollo-client 來獲取數(shù)據(jù)...

    ranwu 評論0 收藏0
  • 21 分鐘學(xué) apollo-client 系列:apollo store 存儲細(xì)節(jié)

    摘要:分鐘學(xué)是一個系列,簡單暴力,包學(xué)包會。內(nèi)部通過自己的私有沒有暴露給開發(fā)者來更新這個。相當(dāng)于這個就是自己維護(hù)的,它將所有通過得到的數(shù)據(jù)保存在這里。的生成規(guī)則根據(jù)官方文檔的說法,在創(chuàng)建時,可選設(shè)置。如果不存在,則可能出現(xiàn)。 21 分鐘學(xué) apollo-client 是一個系列,簡單暴力,包學(xué)包會。 搭建 Apollo client 端,集成 redux使用 apollo-client 來...

    lavor 評論0 收藏0
  • 21 分鐘學(xué) apollo-client 系列:修改本地 store 數(shù)據(jù)

    摘要:分鐘學(xué)是一個系列,簡單暴力,包學(xué)包會。搭建端,集成使用來獲取數(shù)據(jù)修改本地的數(shù)據(jù)提供定制方案請求攔截封裝修改的存儲細(xì)節(jié)寫入的失敗原因分析和解決方案修改本地數(shù)據(jù)之前我們已經(jīng)知道,我們可以在請求結(jié)束之后,通過自動執(zhí)行的回調(diào),修改。 21 分鐘學(xué) apollo-client 是一個系列,簡單暴力,包學(xué)包會。 搭建 Apollo client 端,集成 redux使用 apollo-clien...

    617035918 評論0 收藏0
  • 21 分鐘學(xué) apollo-client 系列:獲取數(shù)據(jù)

    摘要:分鐘學(xué)是一個系列,簡單暴力,包學(xué)包會。一旦組件掛載后,會自動進(jìn)行數(shù)據(jù)請求,前提是客戶端提供的和后端的相符。如果回調(diào)返回直接不作請求。在組件內(nèi)進(jìn)行分頁請求之前提到了,這個裝飾器為添加了對象,其中有個函數(shù)為。 21 分鐘學(xué) apollo-client 是一個系列,簡單暴力,包學(xué)包會。 搭建 Apollo client 端,集成 redux使用 apollo-client 來獲取數(shù)據(jù)修改本...

    robin 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<