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查询,以相似方式获取数据