与 Falcor、GraphQL 和 Resolver 相关的"declarative data loading"是什么?



我在读《Redux Without Profity》,作者说:

声明性数据加载的趋势有利于该模型,主要是因为这更容易处理。较新的React框架,例如Falcor,GraphQL和Resolver还自动对请求进行批处理和重复数据消除。还可以使用简单的Redux操作组合来实现自动操作。

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

有人能提供一个快速的解释和例子,将"声明性数据加载"和您的平均http/ajax数据加载(例如,一个简单的MEAN堆栈todo列表)并置吗

声明性数据加载和http/ajax数据加载之间的根本区别在于声明性编程和命令式编程之间的区别。使用声明式方法,您只需要您需要什么,仅此而已。另一方面,使用命令式方法,您还需要告诉步骤,即如何获得所需内容。

让我们来看看下面的Relay声明性数据加载示例。它告诉,对于每个派系,它想要这些数据:id、派系id、名称、船只,以及AddShipMutation想要的派系数据。如何提取数据是抽象的。

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加载数据,我们必须指定如何获取数据。

  1. 提出请求
  2. 接收响应
  3. 从响应中提取数据
  4. 存储数据

希望这能有所帮助!