Reactjs “什么是”呢;“声明性数据加载”;关于Falcor、GraphQL和解析器?

Reactjs “什么是”呢;“声明性数据加载”;关于Falcor、GraphQL和解析器?,reactjs,redux,graphql,resolver,falcor,Reactjs,Redux,Graphql,Resolver,Falcor,我在读,作者说: 声明性数据加载的趋势主要支持这种模型 因为这更容易使用。更新的React框架,如Falcor, GraphQL和解析器还可以自动批处理和重复数据消除请求。 也可以结合使用普通Redux操作来实现 自动操作 作者使用“声明性数据加载”有点漫不经心,所以我认为它一定是一个广为人知且非常明显的术语。不过我在谷歌上搜索了一下,没找到多少。不幸的是,作者认为这是显而易见的先验知识。请帮忙 有人能提供一个快速的解释和示例,将“声明性数据加载”和您的平均http/ajax数据加载并列在一起,

我在读,作者说:

声明性数据加载的趋势主要支持这种模型 因为这更容易使用。更新的React框架,如Falcor, GraphQL和解析器还可以自动批处理和重复数据消除请求。 也可以结合使用普通Redux操作来实现 自动操作

作者使用“声明性数据加载”有点漫不经心,所以我认为它一定是一个广为人知且非常明显的术语。不过我在谷歌上搜索了一下,没找到多少。不幸的是,作者认为这是显而易见的先验知识。请帮忙


有人能提供一个快速的解释和示例,将“声明性数据加载”和您的平均http/ajax数据加载并列在一起,比如,简单的平均堆栈待办事项列表?

声明式数据加载和http/ajax数据加载之间的根本区别在于声明式编程和命令式编程之间的差异。使用声明式方法,您只需提及您需要什么,就够了。另一方面,使用命令式方法,你还需要告诉步骤,即如何获得你需要的东西

让我们看一下下面的内容。它告诉我们,对于每个派系,它需要这些数据:id、派系id、姓名、船只以及派系所需的数据。如何获取数据是抽象的

fragments: {
  factions: () => Relay.QL`
    fragment on Faction @relay(plural: true) {
      id,
      factionId,
      name,
      ships(first: 10) {
        edges {
          node {
            id
            ${StarWarsShip.getFragment('ship')}
          }
        }
      }
      ${AddShipMutation.getFragment('faction')},
    }
  `,
},
对于使用HTTP或AJAX加载数据,我们必须指定如何获取数据

  • 提出请求
  • 接收响应
  • 从响应中提取数据
  • 存储数据

  • 希望这有帮助

    谢谢,艾哈迈德。看起来“主要”的区别在于在请求和存储之间没有“解析/提取”步骤?您仍然发送请求,并且仍然需要接收响应并将其存储。您不必解析响应,因为它已经是您所需要的了?这是因为“请求”和“数据提取”(在某种程度上)在一个大的块中(例如graphQL查询)…响应不需要提取,只需要进入道具或存储?实际上,更大的区别是,通过声明性数据加载,我们,开发人员,不必担心提出哪个请求以及如何提出请求。我们只是“声明”我们想要的数据。在幕后,确定了所需的请求;仍然有一个请求被发送,响应被接收和解析。GraphQL查询不是请求和数据提取的一个大模块。它不知道要提出哪个请求以及如何提出请求。GraphQL查询只表示需要哪些数据。您可能会发现在客户端的上下文中更容易理解。是一个符合GraphQL的客户端框架。现在,Relay抽象了与GraphQL服务器的所有通信的复杂性,这意味着,Relay将接受GraphQL查询,并执行它需要执行的任何操作来获取所需的数据。从高级视图来看,使用声明式数据加载,我们不需要考虑如何向我们提供数据。该框架抽象了这种复杂性。相比之下,使用命令式方法,我们还必须处理使数据可用所需的所有事情(确定适当请求的逻辑、如何请求、处理响应、存储等)。