React 和 GraphQL 中使用的“...”语法是啥?它是更通用的Javascript吗?

Posted

技术标签:

【中文标题】React 和 GraphQL 中使用的“...”语法是啥?它是更通用的Javascript吗?【英文标题】:What is the "..." syntax used in both React and GrahpQL? Is it more general Javascript?React 和 GraphQL 中使用的“...”语法是什么?它是更通用的Javascript吗? 【发布时间】:2017-05-22 14:11:22 【问题描述】:

试图理解 React 和 GraphQL 中的“...”符号之间的联系。他们是

1) 使用相同的通用 javascript 语法?如果是这样,这意味着什么——因为我的理解是针对 React 的。 (我认为这意味着将从父母继承的属性传递给孩子。”

2) 不相关的语法在 React 和 GraphQL 中恰好相同。

我在example from the ApolloClient tutorial 中看到它在 GraphQL 中使用

tutorial: const PokemonQuery = gql`   query PokemonQuery($id: ID!) 
    Pokemon(id: $id) 
      ... PokemonCardPokemon
          $PokemonCard.fragments.pokemon

在这个例子中,PokemonCardPokemon 是一个 GraphQL 片段。该教程说:“请注意,我们使用 ... 语法在查询中选择片段,并且我们还在查询之后使用 $PokemonCard.fragments.pokemon 包含片段。”

【问题讨论】:

它在哪里做什么?你问的是 ES6 语法吗? What does the three dots in react do?的可能重复 Slaks 和 Shahank Kadne:澄清问题是 React 中如此常用的“...”是否与 GraphQL 片段中使用的“...”有关。它们是相同的还是它们都使用更通用的 javascript 表示法是巧合? 【参考方案1】:

#2

JavaScript/React 和 GraphQL 各自为自己的目的使用 ... 运算符,但不知道对方如何使用它。


在 JavaScript 中,... 与数组和类似数组的对象一起用于collect 或spread 它们的值。

例如,传播数组的值,以便将它们作为单独的参数传递。

var list = [ 5, 3, 10 ];
console.log(Math.min(...list));           // 3

// shorter and simpler than...
console.log(Math.min.apply(Math, list));  // 3

// and means the same as...
console.log(Math.min(5, 3, 10));          // 3

在 GraphQL 中,... 用于应用 Fragments 或可在整个查询中重复使用的命名字段集。


  leftComparison: hero(episode: EMPIRE) 
    ...comparisonFields
  
  rightComparison: hero(episode: JEDI) 
    ...comparisonFields
  


fragment comparisonFields on Character 
  name
  appearsIn
  friends 
    name
  

如果 字段被重复。片段的概念经常用于 将复杂的应用程序数据需求拆分成更小的块, 尤其是当您需要将大量 UI 组件与 将不同的片段合并到一个初始数据提取中。

【讨论】:

以上是关于React 和 GraphQL 中使用的“...”语法是啥?它是更通用的Javascript吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 React 中使用 GraphQL 查询数据以及来自先前查询的数据

使用 express-graphql 和 react-apollo 处理错误

如何在 React 和 Typescript 中映射我的 Union 类型的 GraphQL 响应数组

用于删除和更新的 React GraphQL 订阅

使用 Express-GraphQL 和 React-Apollo 订阅 GraphQL

无法使用 React-Query + Graphql-Request 在 useQuery 中传递参数