【问题标题】:What does imperative mean in Apollo GraphQL?Apollo GraphQL 中的命令式是什么意思?
【发布时间】:2020-09-30 17:08:03
【问题描述】:

我是 Apollo GraphQL 的新手。在阅读其文档时,它多次提到了imperative 这个词。但我真的无法在网上找到一个解释来阐明 Apollo GraphQL 的“必要性”究竟是什么。到目前为止,最简单的def。我得到的是imperative programming is like how you do something, and declarative programming is more like what you do.

这是一个为 Apollo GraphQL 提及 imperative 的示例:

GraphQL 的突变是强制触发的,但这只是 因为 HOC 或渲染道具授予访问该函数的权限 执行突变(例如单击按钮)。与阿波罗一起, 突变和查询变得声明性而不是命令性。

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

【问题讨论】:

    标签: graphql apollo


    【解决方案1】:

    这实际上是一个比你想象的更简单的段落,在这句话中,命令是解释人们如何选择写出一个 graphql react 组件:

    import React from 'react';
    import { Query } from 'react-apollo';
    
    const Profile = () => (
      <Query query={}>
        {() => <div>My Profile</div>}
      </Query>
    );
    
    export default Profile;
    

    虽然这个组件实际上并没有进行查询,因为没有提供查询,但我们是在命令式地对其进行编程。从某种意义上说,我们将查询提供给组件,HOC 触发查询或突变并将其传递给道具。在这个例子中,我们可以逐步完成从创建 HOC 到添加查询到通过组件上的 props 调用它的代码。虽然有趣的是,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 组件有几个步骤,您可以先执行这些步骤,然后才能使用您的数据。在第二个示例中,我们只是在单个语句中描述了我们想要的内容并接收回数据。

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

    【讨论】:

      猜你喜欢
      • 2016-05-08
      • 2012-05-10
      • 1970-01-01
      • 2012-09-06
      • 2021-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-30
      相关资源
      最近更新 更多