21 分钟学 apollo-client 系列:扩展 ApolloClient 的 api

21 分钟学 apollo-client 是一个系列,简单暴力,包学包会。

搭建 Apollo client 端,集成 redux
使用 apollo-client 来获取数据
修改本地的 apollo store 数据
提供定制方案

apollo store 存储细节
写入 store 的失败原因分析和解决方案

apollo 的很多 api 都丑得惨绝人寰,比如 readQuerywriteQuery,绝对会让你写很多垃圾代码。
但你又不能去改源码,给官方提了 pr 产品经理又等不起你。那怎么办呢?

本章就教你非常简单地实现扩展 client 的 api。

我们可以借鉴 Redux 的 enhancer 的写法,为 apollo 的 client 实例添加一些自己的方法。

enhancers.js

const enhancers = [
    log,
];

export default function applyEnhancers(client) {
    // 更函数式的写法是把 enhancers 也作为参数传进来,但是我需要的 enhancer 比较少,做此精简
    return enhancers.reduce(
        (result, enhancer) => enhancer(result),
        client
    );
}

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

    return client;
}

enhancer 的本质就是接收一个 client,对其进行一些修改,再返回一个 client。所以对 client applyEnhancers 的结果还是一个 client。
这看起来和直接修改 client 没区别,不过是把每一个修改,都单独写成一个 enhancer ,比起写在一个巨型函数来说,这样更便于维护。
更重要的是,applyEnhancers 也会有 pipe 的效果,上一个 enhancer 的输出会成为下一个 enhancer 的输入,便于组合。

然后我们只需要在前面的基础上

createApolloCLient.js

import applyEnhancers from './enhancers';

export default function createApolloCLient() {
    const client = ....; // 可以参看以前的章节查看详细的代码
    return applyEnhancers(client);
}

非常简单吧!

在后面的章节里,你会看到我是如何使用 enhancer 封装 readQuery + writeQuery 为一个 api 的。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
npm warn deprecated apollo-server-core@3.12.0: the `apollo-server-core` package has been deprecated. 这个警告意味着`apollo-server-core`包已被废弃。废弃意味着它将在将来的版本中不再被维护或更新。当我们在使用npm安装或更新项目依赖时,如果看到这个警告,就意味着有一些问题需要解决。 在本例中,警告涉及到`apollo-server-core` 版本3.12.0。这个包是Apollo的一个核心组件,用于构建GraphQL服务器。然而,该版本已被废弃,这意味着它存在一些问题或者有更好的替代选择。 废弃的软件包存在一些风险,因为它们不再得到维护或更新。这可能导致安全漏洞、缺陷或不兼容问题。所以,我们需要尽快寻找替代方案。 为了解决这个问题,我们可以查看`apollo-server-core`的文档或发布信息,以了解更多关于废弃的原因和可能的替代包的信息。通常,`apollo-server-core`的维护者会提供一些指导或建议,告诉我们如何迁移到更新的版本或其他相关的包。 我们可以使用命令`npm outdated`来检查是否有更近的版本可用,并尝试更新到最新的兼容版本。如果没有直接的替代包,我们可以考虑使用类似的库或搜索其他的GraphQL服务器解决方案。 总之,当我们看到npm的警告废弃某个软件包时,我们需要密切关注相关的文档和发布信息,寻找替代方案,并尽快做出调整以避免可能带来的问题或风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值