Graphql 在React应用程序中,是<;查询>;在执行查询时是否首选client.query?
我正在从事一个React项目,其中apollo客户机用于执行以下查询: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
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
组件