imperative在Apollo GraphQL中是什么意思?

问题描述 投票:1回答:1

我是Apollo GraphQL的新手。 在阅读它的文档时,它提到了一个词,即 imperative 几次。 但我真的找不到网上的解释,说明 "imperative "对Apollo GraphQL到底有什么作用。到目前为止,我得到的最简单的定义是 imperative programming is like how you do something, and declarative programming is more like what you do.

下面是一个例子,提到 imperative 阿波罗GraphQL的。

GraphQL的突变是强制触发的,但这只是因为HOC或render prop授予对执行突变的函数的访问权(例如,在点击按钮时)。在Apollo中,突变和查询变成了声明式而不是命令式。

谁能提供一个可靠的例子来帮助我理解Apollo GraphQL中命令式的含义?

graphql apollo
1个回答
0
投票

其实这段话比你意识到的要简单,在这句话中,imperative是在解释如何选择写出一个graphql react组件为。

import React from 'react';
import { Query } from 'react-apollo';

const Profile = () => (
  <Query query={}>
    {() => <div>My Profile</div>}
  </Query>
);

export default Profile;

虽然这个组件实际上并没有进行查询,因为没有提供查询,但我们是强制性地对它进行编程。Imperative的意思是我们是把查询提供到组件中,HOC触发查询或突变,并把它传递到道具中。在这个例子中,我们可以从创建HOC并添加查询到通过组件上的道具调用它的代码一步步完成。虽然有趣的是,一个GraphQL查询 单独 在本质上是声明式的。

声明式的最好描述是描述我们想要的东西,在apollo客户端中,最好的可视化方式是通过一个功能组件。

const LAST_LAUNCH = gql`
  query lastLaunch {
    launch {
      id
      timestamp
    }
  }
`;

export function LastLaunch() {
  const { loading, data } = useQuery(LAST_LAUNCH);
  return (
    <div>
      <h1>Last Launch</h1>
      {loading ? <p>Loading</p> : <p>Timestamp: {data.launch.timestamp}</p>}
    </div>
  );
}

在这个例子中,你可以看到,我们基本上是通过使用

const { loading, data } = useQuery(LAST_LAUNCH);

这行代码用上面写的查询描述了我们希望返回的内容,使之成为一个声明性的语句。

简单来说,例子一中的HOC组件有几个步骤,你可以按照这些步骤来使用你的数据。在第二个例子中,我们只是简单的用一个声明来描述我们想要的东西,然后接收回来的数据。

最后还需要提到的是,在编程中,我们一般会在整个应用程序中混合使用命令式和声明式语句块的代码,这是很正常的。

© www.soinside.com 2019 - 2024. All rights reserved.