包 apollo-link-http 中的新 HttpLink 和 createHttpLink 之间的区别

Differences between new HttpLink and createHttpLink from package apollo-link-http

教程中

https://www.howtographql.com/vue-apollo/1-getting-started/

提供了 new HttpLink 语法,但在官方文档中

https://www.apollographql.com/docs/link/links/http/

函数 createHttpLink 已应用。

None 这两个来源描述了这些方法之间的差异。

两者没有本质区别

如果您查看 apollo-link-http 包源 here,您可以看到导出的 createHttpLink 方法 returns ApolloLink 的新实例class 使用您传递给 createHttpLink 的选项进行初始化(第 62-194 行)。

在同一文件的末尾,您可以看到该包还导出了 HttpLink class,它扩展了 ApolloLink class(第 256- 261):

export class HttpLink extends ApolloLink {
  public requester: RequestHandler;
  constructor(opts?: HttpLink.Options) {
    super(createHttpLink(opts).request);
  }
}

从上面的代码可以看出,当你通过创建HttpLinkclass的新实例来创建apollo httplink时,你传递给构造函数的选项在内部传递给 createHttpLink,其中 returns 如上所述 ApolloLink 的一个实例,并且该实例的 RequestHandler 传递给(即复制)到新的 HttpLink 实例的父实例,它也是 ApolloLink 的实例(请参阅第 96-124 行 here 了解 ApolloLink 自己的构造函数)。

注意 apollo-link-http 包自己的 docs NOT 提到 new HttpLink 语法,所以我会坚持 createHttpLink 用于将来兼容性的语法。