Graphql 在React应用程序中,是<;查询>;在执行查询时是否首选client.query?

Graphql 在React应用程序中,是<;查询>;在执行查询时是否首选client.query?,graphql,apollo,react-apollo,Graphql,Apollo,React Apollo,我正在从事一个React项目,其中apollo客户机用于执行以下查询: const client = new ApolloClient({ link: link, cache: new InMemoryCache(), }); client.query({ query: gql`{ hello }` }) 但我看到的大多数例子如下: import gql from "graphql-tag"; import { Query } from "react-apollo"; co

我正在从事一个React项目,其中apollo客户机用于执行以下查询:

const client = new ApolloClient({
    link: link,
    cache: new InMemoryCache(),
});

client.query({ query: gql`{ hello }` })
但我看到的大多数例子如下:

import gql from "graphql-tag";
import { Query } from "react-apollo";

const GET_DOGS = gql`
  {
    dogs {
      id
      breed
    }
  }
`;

const Dogs = ({ onDogSelected }) => (
  <Query query={GET_DOGS}>
    {({ loading, error, data }) => {
      if (loading) return "Loading...";
      if (error) return `Error! ${error.message}`;

      return (
        <select name="dog" onChange={onDogSelected}>
          {data.dogs.map(dog => (
            <option key={dog.id} value={dog.breed}>
              {dog.breed}
            </option>
          ))}
        </select>
      );
    }}
  </Query>
);
从“graphql标签”导入gql;
从“react apollo”导入{Query};
const GET_DOGS=gql`
{
狗{
身份证件
繁殖
}
}
`;
常数狗=({onDogSelected})=>(
{({加载,错误,数据})=>{
如果(加载)返回“加载…”;
if(error)返回`error!${error.message}`;
返回(
{data.dogs.map(dog=>(
{狗的品种}
))}
);
}}
);

对于React应用程序,何时一种方法优于另一种?是否总是首选
语法?

直接在客户机上调用
query
有一些用例,但是yes使用查询组件是一种模式。从文档中:

当React装载查询组件时,Apollo客户端会自动触发您的查询。如果您想延迟触发查询,直到用户执行某个操作(例如单击按钮),该怎么办?对于这个场景,我们希望使用ApolloConsumer组件并直接调用client.query()。。。这种获取方式非常冗长,因此我们建议尽可能尝试使用查询组件

Query
组件的render prop函数的签名和
Query
调用承诺解析为的值都属于该类型。然而,两者之间有一些细微的区别。例如,使用组件意味着将多次更新
加载
值以反映查询的状态,而直接使用客户端时,您无法获得相同的功能

通常,直接使用客户机还意味着您需要将结果保持在其他组件的状态,而不仅仅是使用render props函数提供的值


如果需要手动触发查询,特别是如果查询结果不会保持在状态,那么直接使用客户机是完全可以的。否则,您可能最好使用
Query
组件。

有直接在客户端调用
Query
的用例,但是是的,使用Query组件是一种模式。从文档中:

当React装载查询组件时,Apollo客户端会自动触发您的查询。如果您想延迟触发查询,直到用户执行某个操作(例如单击按钮),该怎么办?对于这个场景,我们希望使用ApolloConsumer组件并直接调用client.query()。。。这种获取方式非常冗长,因此我们建议尽可能尝试使用查询组件

Query
组件的render prop函数的签名和
Query
调用承诺解析为的值都属于该类型。然而,两者之间有一些细微的区别。例如,使用组件意味着将多次更新
加载
值以反映查询的状态,而直接使用客户端时,您无法获得相同的功能

通常,直接使用客户机还意味着您需要将结果保持在其他组件的状态,而不仅仅是使用render props函数提供的值

如果需要手动触发查询,特别是如果查询结果不会保持在状态,那么直接使用客户机是完全可以的。否则,您最好使用
Query
组件