Relay GraphQL理解

Relay是构建数据驱动 React 应用的js框架。redux

Relay:特性1、声明式:再也不使用一个命令式API与数据存储通信。而是简单的使用RraphQL声明组件数据需求,让Relay理解如何及何时获取你的数据。缓存

    特性2、托管:Relay聚合查询成有效的网络请求,只获取我的须要的数据。服务器

    特性3、转变:Relay容许你使用GraphQL mutations 在客户端和服务器端转变数据,提供自动数据一致,优化更新和错误处理。网络

 Relay经过维护组件与数据的依赖--在依赖的数据就绪前 组件是不会被渲染的,Relay用缓存的全部GraphQL数据的惟一的store,管理数据订阅和试图更新。架构

Relay的声明式数据获取:relay经过抽象出一个container的概念,让每一个模块提早声明本身须要的数据,Relay会先遍历全部container,组成query tree,这样就达到了只使用一个网络请求的目的,同时经过声明式数据获取还能够更好的对组件约束,只能获取它已声明的数据,relay也能够作些验证。框架

 

GraphQL 一种查询语句,用于在复杂的应用程序的数据模型中,描述数据要求。优化

    step1:创建GraphQL 型架构影射到代码库。网站

    step2:服务针对该类型架构的查询结果,运行一个查询 获取一个字段。graphQL功能首先确保查询语法和语义有效执行,不然报告错误。ui

import {
    graphql,
    GraphQLSchema,
    GraphQLObjecType,
    GraphQLString
} from 'graphql';
    var schema = new GraphQLSchema({
    query:new GraphQLobjectType({
        name:'RootQueryType',
        fields:{
            hello:{
                type:GraphQLString,
                resolve:() => 'world'
                }
            }
        })
 });


var query = `{boyhowdy}`;
grqphql(schema,query).then(result => {
    ...
    console.log(result);
});

 Relay只有一个store,经过action(relay为mutations)改变,但禁止直接控制,根据GraphQL的查询语句去自动处理,储存或修改服务端数据。。spa

mutitations在客户端和服务器端都修改数据,保持数据一致,只能变动在服务器端声明过得数据,而且服务器必须有一个graphQL服务。

参考网站:redux 与 relay对比:http://www.tuicool.com/articles/7feMZrb

relay把React组件包裹进relay容器,可以自动检索子组件的数据依赖(根据GraphQL 查询片断),确保在graphQL查询片断在组件被渲染以前获取到数据,查询数据做为props传递进UI组件

Mutations(变动):客户端改变数据是常见需求,但愿交互更快,作到乐观更新(页面UI先改变,再以服务器返回结果为准更改页面UI,若是出错会回滚),以后等到服务器返回结果,进行UI改变。

relay中获取数据,定义mutation,mutation首先是一个操做,而后是个查询,所以能够经过mutations使用GraphQL查询,以相似方式获取数据

相关文章
相关标签/搜索