DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录.
  • DmozDir.org
DMOZ目录快速登录入口-免费收录各类优秀网站的中文网站目录.由人工编辑,并提供网站分类目录检索及地区分类目录检索,是站长免费推广网站的有力平台!

入门GraphQL和应对本土

  • 入门GraphQL和应对本土

  • 已被浏览: 40 次2020年10月14日    来源:  DMOZ中文网站分类目录
  • 杰米美美展示在一个阵营通过创建一个简单的咖啡豆比较应用,包括应用程序中的世博会基本模板本地设置GraphQL的力量。

    在2012年,Facebook的工程师尼克·施罗克开始在小样机工作,以便从旧的,不支持的合作伙伴API搬走该供电电流Facebook动态消息。当时,这被称为“超图”。快进到今天和超图已经帮助塑造了开源的查询语言GraphQL,这一直是许多时髦的近倍。

    Facebook的描述GraphQL作为“原料药的查询语言,并履行与您现有的数据这些查询运行时”。简单地说,GraphQL是REST的替代方案,已自发布以来一直稳步日益普及。而对于其余部分的开发人员从一系列端点的请求通常整理数据,GraphQL允许开发者单查询发送到描述的确切数据需求的服务器。

    想了解从地上爬起来阵营本土?本文是从我们的高级库中的提取物。获取整个集合的阵营本土本书涵盖了基本面,项目,技巧和工具及更多与SitePoint保费。现在加入只需$ 9 /月。

    先决条件

    在本教程中,你需要作出反应原住民的基本知识和一些熟悉世博会环境。你还需要安装在您的移动设备或计算机上安装了一个兼容模拟器对世博会的客户端。如何做到这一点的说明可以在这里找到。

    项目概况

    在本教程中,我们将在于向世人证明GraphQL的输出功率是在阵营通过创建一个简单的咖啡豆比较应用程序本地设置。所以,你可以专注于所有的伟大的事情GraphQL所提供的,我已经把使用世博会应用的基本模板。

    A mockup of our coffee comparison app

    要开始,你可以克隆该回购并导航到“工具入门”分支,其中包括所有的我们的基本观点,开始将我们的GraphQL数据,以及所有我们最初的依赖关系,在这个阶段是:

    <预的tabindex = “0” 类= “语言JSON ”> <代码类=“ 语言JSON”> {

    “世博会”: “^ 32.0.0”

    “反应”: “16.5.0”,

    “反应天然的”:“https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz”

    “反应导航”:“^ 3.6.1”

    }

    要复制这个分支,你需要打开终端,运行以下命令:

    <预的tabindex = “0” 类= “语言的bash ”> <代码类=“ 语言的bash”> GIT中克隆https://github.com/jamiemaison/graphql-coffee-comparison.git

    为了然后导航到工具入门的分支,你进入以 CD graphql-咖啡相比,然后运行<代码> git的结帐工具入门

    下一阶段是安装我们的依赖。要做到这一点,确保你在节点<代码> v11.10.1 ,然后运行<代码> NPM安装的项目的根目录下。这将上面列出的所有依赖关系添加到您的 node_modules 的文件夹中。

    要开始添加GraphQL我们的阵营原生应用,我们将需要安装几个依赖关系,帮助我们进行一些简单的GraphQL功能。由于是与现代JavaScript开发共同的,你并不需要所有这些依赖关系来完成数据的请求,但他们在这使得开发结构的一个更好的机会一些干净的,易于读取的代码一定的帮助。你需要可以通过运行<代码> NPM安装--save阿波罗 - 升压安装的依赖反应,阿波罗graphql标签graphql

    以下是对这些依赖关系的概述:

    <代码>阿波罗 - 升压:与GraphQL入门在反应的零配置方式/阵营原生

    <代码>反应-阿波罗:这提供GraphQL和阿波罗客户端之间的积分

    <代码> graphql标签:模板文字标记,解析查询GraphQL

    <代码> graphql :对于GraphQL JavaScript的参考实现

    一旦所有必需的依赖关系已完成安装,运行<代码> NPM启动。您现在应该看到自己熟悉的世博会的窗口,如果你启动应用程序(通过模拟器或者设备上),那么你应该会看到类似这样的画面:

    A mockup of our getting started page

    在基本术语,以本申请具有被<代码>反应的导航,<代码> Home.js CoffeePage.js 管理两个屏幕。在主页屏幕包含一个简单的<代码> FlatList 呈现所有提供给其<代码>咖啡豆数据字段的。点击时,用户被导航到 CoffeePage 该项目,关于其产物显示更多的信息。这是我们的工作,现在居住与GraphQL有趣的数据,这些观点。

    The complete coffee page

    阿波罗服务器游乐场

    有两个主要元件,以任何成功GraphQL事务:服务器保持的数据,并在前端查询做出请求。对于本教程的目的,我们不会开始钻研的服务器端代码的奇妙世界,所以我创建了我们的服务器为我们准备好了。所有你需要做的就是在浏览你喜欢的浏览器yq42lj36m9.sse.codesandbox.io,让它在整个发展过程中运行。对于那些有兴趣,服务器本身使用的阿波罗服务器运行,并包含了足够的代码,以保持我们所需要的数据和服务于它在收到适当的查询。对于进一步的阅读,可以头部到apollographql.com阅读更多关于<代码>阿波罗服务器 .GraphQL查询基础

    在我们进入写那将要求我们需要为我们的咖啡豆比较应用程序中的数据的实际代码,我们应该明白GraphQL多么查询工作。如果你已经知道查询的工作,或者只是想开始使用的编码,你可以跳到下一节。

    注:这些查询不会与我们codesandbox服务器的工作,但随时codesandbox.io创建自己的,如果你想测试一下查询。

    在最简单的层面上,我们可以用我们的查询平面结构时,我们知道我们请求的数据的形状:

    <预的tabindex = “0” 类= “语言的javascript ”> <代码类=“ 语言的javascript”> QUERY:RESPONSE:

    {{

    {咖啡 “咖啡”:{

    混合型“混合”:“富”

    }}

    }}

    在左侧,我们看到了GraphQL查询请求<代码>混合从<代码>咖啡字段。这种运作良好时,我们确切地知道我们的数据结构是什么,但什么事情的时候是不太透明的?在这个例子中,<代码>共混物返回我们一个字符串,但查询可以用来请求对象以及:

    <预的tabindex = “0” 类= “语言的javascript ”> <代码类=“ 语言的javascript”> QUERY:RESPONSE:

    {{

    {咖啡 “咖啡”:{

    豆{“豆”:

    混合{

    }混合:“富”

    }},

    } {

    融合:“平稳”

    }

    ]

    }

    }

    在这里你可以看到,我们只是要求在豆类对象,只有场<代码>混合从该对象返回。在豆类中的每个对象的阵列很可能含有比其他的其他数据的混合的,但GraphQL查询帮助我们只请求我们需要的数据,切割出任何额外的信息,这是没有必要的我们的应用程序。

    所以,当我们需要更具体的比这个吗? GraphQL提供了许多东西的能力,但一些允许极其强大的数据请求是通过参数在查询的能力。看看下面的例子:

    <预的tabindex = “0” 类= “语言的javascript ”> <代码类=“ 语言的javascript”> QUERY:RESPONSE:

    {{

    咖啡(companyId: “2”){ “咖啡”:{

    豆{“豆”:

    混合{

    }混合:“富”

    }},

    } {

    融合:“平稳”

    }

    ]

    }

    }

    我们看到的是,我们可以通过一个参数 - 在这种情况下,在 companyId - 这确保了我们只从一个特定的公司返回<代码>豆类。休息,你可以通过一个单一的一套通过查询参数和URL参数段,但GraphQL查询任何一个领域,它可以得到自己的一套参数。这允许GraphQL成为每个请求进行多个API取一个动态的解决方案。

    别名

    到目前为止,我们所有的查询不得不返回对象的字段在查询本身匹配字段的名称。这是伟大的使用简单的参数时,但如果你想查询同一领域与您的数据请求不同的参数是什么?这是别名进来,别名让你改变一个字段的名称,以便您可以重命名任何返回的数据,因此在数据请求中使用不同的参数。就拿我们的咖啡豆例子。如果我们想返回的数据来自两个不同的公司标识?我们将构建我们的查询是这样的:

    <预的tabindex = “0” 类= “语言的javascript ”> <代码类=“ 语言的javascript”> QUERY:RESPONSE:

    {{

    公司1:咖啡(companyId: “1”){ “公司1”:{

    豆{“豆”:

    混合{}“融合”:“富”

    }}

    Company2的:咖啡(companyId: “2”){]

    豆子 { },

    融合 “Company2的”:{

    } “豆子”: [

    } {

    }“混合型”:“果香”

    }

    ]

    }

    }

    在这里,我们请求数据别名<代码>公司1 Company2的,它是简单的不同的咖啡堆叠在彼此的顶部上的查询。别名可以在修改一个强大的工具你需要为你的确切数据要求。

    变量

    到现在为止,我们已经知道我们确切的查询,因此可以硬编码在我们的应用程序,但大多数应用程序都需要这些字段是动态的。例如,用户可以从列表显示中选择咖啡豆的公司。我们不会预先知道其咖啡豆公司的用户选择,所以我们需要传递这些需求的一种方式。这是变量进来了。

    该GraphQL文档列出三件事情,我们需要以使用变量做:

    与替换在查询中的静态值<代码> $ VARIABLENAME

    声明<代码> $ VARIABLENAME 如由查询接受的变量之一

    通<代码> VARIABLENAME:值在单独的,传输特定的(通常是JSON)变量词典

    在实践中,这意味着我们的数据查询会是这个样子:

    <预的tabindex = “0” 类= “语言的javascript ”> <代码类=“ 语言的javascript”>查询coffeeCompany(companyId:CompanyId){

    咖啡(companyId:companyId){

    豆子: {

    类型

    }

    }

    }

    我们还通过在<代码> companyId 作为JSON对象:

    <预的tabindex = “0” 类= “语言的javascript ”> <代码类=“ 语言的javascript”> {

    “companyId”: “1”

    }

    内GraphQL使用变量是让我们所有的查询请求动态的一种强有力的方式,因为我们只要求我们目前需要的数据。

    咖啡查询

    对于我们的应用程序的目的,我们将需要一个查询,使我们能够请求数据检索只有我们的咖啡豆,而包括所有我们将需要内的相关领域。我们的数据要求没有那么复杂,所以它会是这个样子:

    <预的tabindex = “0” 类= “语言的javascript ”> <代码类=“ 语言的javascript”> {

    咖啡 {

    豆子 {

    名称

    价钱

    混合

    颜色

    productImage

    }

    }

    }

    请求我们的数据

    现在的实际代码,我们将用它来要求我们的数据。打开<代码> App.js 的,这是我们所有的意见容器将是一个不错的地方,使我们的数据请求的应用程序启动时。

    我们将要初始化我们的客户,我们可以简单地通过从<代码>阿波罗 - 升压的进口ApolloClient并指定我们的服务器URL做。你需要有初始化的服务器,这是通过简单地在你的浏览器中运行yq42lj36m9.sse.codesandbox.io实现它需要特别重视。有时候,你可能会发现服务器超时。如果世博会返回警告,看起来像“网络错误”,在你的浏览器重装yq42lj36m9.sse.codesandbox.io重新初始化服务器。

    一旦服务器运行,进口和初始化增加的<代码>顶App.js 的,它应该是这个样子:

    <预的tabindex = “0” 类= “语言的javascript ”> <代码类=“ 语言的javascript”> // ./App.js

    进口ApolloClient从“阿波罗 - 升压”;

    常量客户=新ApolloClient({URI: "https://yq42lj36m9.sse.codesandbox.io/"})

    接下来,我们要组装graphQL查询供以后使用的时候我们要求我们的数据。幸运的是,在 graphql标签库使得这种简单。再次,我们需要将库本身导入到<代码> App.js

    <预的tabindex = “0” 类= “语言的javascript ”> <代码类=“ 语言的javascript”> // ./App.js

    从“graphql标签”进口GQL;

    现在,我们就可以构建查询:

    <预的tabindex = “0” 类= “语言的javascript ”> <代码类=“ 语言的javascript”> // ./App.js

    常量QUERY = gql`

    {

    咖啡 {

    豆子 {

    名称

    价钱

    混合

    颜色

    productImage

    }

    }

    }

    `

    下一步是修改渲染功能,包括我们的数据请求。要做到这一点,我们使用反应阿波罗的库发出请求,这使我们能够处理的响应,因为我们认为合适的。添加一个新的进口为 App.js

    <预的tabindex = “0” 类= “语言的javascript ”> <代码类=“ 语言的javascript”> // ./App.js

    进口{ApolloProvider,查询}从 "反应-阿波罗";

    然后改变渲染功能,因此,它现在看起来是这样的:

    <预的tabindex = “0” 类= “语言的javascript ”> <代码类=“ 语言的javascript”> // ./App.js

    渲染(){

    回报(

    <查询查询= {} QUERY>

    {({装载,差错,数据})=> {如果(装载||误差)返回<查看/>

    返回<查看风格= {{挠曲:1}}>

    {this.state.isFontsLoaded? :<检视/>}

    }}

    );

    }

    在这里,您可以我们使用 QUERY 的看到我们前面创建的请求所需的数据。在这个时刻,我们只是渲染,同时加载空视图,以及是否有数据请求中的错误。在实践中,这将被交换出去的相关载荷和错误的观点,但在这个例子中,我们将保留空白。一旦返回的数据,我们绘制了AppContainer如常。您可以检查数据通过检查<代码>数据未来通过被成功返回。这可以通过添加一个<代码>的console.log(数据)来检查到您的代码,以查看在终端的输出。你应该接收对象与我们的咖啡和<代码>豆类的领域,只要你的阿波罗服务器没有问题运行。

    与上下文API存储数据

    我们将需要一个地方来存储我们的数据,这将是在我们的任何组件的访问无论多远下来的树他们。如果我们通过几个孩子来传递数据一路只是为了让我们的组件,这不会是最有效的事情。鉴于我们的数据存储需求是这个例子很简单,在使用作出反应的上下文API,而不是一些更复杂的状态管理工具,如终极版将是不错的。上下文API允许你通过全局状态了我们的组件树,而不需要每次都将其通过道具,并为我们当前的例子,这就够了。

    终极版的语境API之上的好处大致可缩小到三点:

    终极版配备了时间旅行调试

    它提供了中间件API开发人员,让您使用的工具,如<代码>终极版 - 传奇

    其阵营绑定防止有太多的渲染

    使用上下文API简单得不能再简单。从本质上说,我们只需要创建一个<代码> <提供商/> 组件创建一个<代码>我们的所有数据的存储和访问数据<消费者/> 的组件时,才需要它。

    创建提供商

    让我们回到<代码> App.js 的,在这里我们只需要添加几行,给我们的提供的启动和运行。首先,我们将通过创建我们的<代码> AppContext 的开始。我们需要访问此的任何文件,我们要使用的存储的数据,所以我们需要确保它的出口。创建<代码> AppContext 中,添加以下线为 App.js

    <预的tabindex = “0” 类= “语言的javascript ”> <代码类=“ 语言的javascript”> // ./App.js

    出口常量AppContext = React.createContext({数据:{咖啡:{豆:[]}}});

    在这里,我们所创造的环境和一些空数据初始化。接下来,我们要填充的 AppProvider 与我们从GraphQL服务器接收数据。

    存储cCoffee数据

    要更新我们的数据提供者,我们只是在我们的 App.js 的改变了空容器视图渲染功能的提供商,同时加入了我们的GraphQL数据,其<代码>数据支柱。这看起来是这样的:

    <预的tabindex = “0” 类= “语言的javascript ”> <代码类=“ 语言的javascript”> // ./App.js

    渲染(){

    回报(

    <查询查询= {} QUERY>

    {({装载,差错,数据})=> {

    如果(装载||误差)返回<查看/>

    返回

    {this.state.isFontsLoaded? :<检视/>}

    }}

    );

    }

    在这里,你可以看到,我们是直接存储在我们的供应商bean数据(<码> data.coffee.beans )。在这一点上,我们拥有所有必要的数据,但我们仍然撕心裂肺我们的占位符的内容。这个谜题的最后一块是修改<代码> Home.js 通过使用<代码>消费呈现我们的数据。

    创建一个应用程序消费

    首先,我们需要导入我们的 AppContext 从早期尽量使用<代码>消费者的。要做到这一点,我们只需从<代码> App.js 将其导入到<代码> Home.js

    <预的tabindex = “0” 类= “语言的javascript ”> <代码类=“ 语言的javascript”> // ./src/Home.js

    进口{AppContext}从 "../App";

    使用<代码>消费像任何其他阵营组件。对于我们当前的目的,我们将它添加到我们的渲染函数,并利用这些数据来填充我们的 FlatList 。我们的呈现功能应该是这个样子:

    <预的tabindex = “0” 类= “语言的javascript ”> <代码类=“ 语言的javascript”> // ./src/Home.js

    渲染(){

    回报(

    {

    (上下文)=>

    <查看风格= {} styles.container> <图像样式= {styles.header}源= {要求( "../资产/ header.png")} />

    <查看风格= {{marginLeft:30,marginTop:30}}>

    <文本样式= {styles.title}>咖啡

    <文本样式= {styles.subtitle}> SELECTION

    风格= {} styles.list

    数据= {}上下文

    renderItem = {({项})=> this.props.navigation.navigate( "CoffeePage",{项目:项目})}>

    <图像样式= {styles.productImage}源= {{URI:item.productImage}} />

    <文本样式= {styles.name}> {item.name}

    <文本样式= {styles.price}> {item.price}

    }

    = numColumns列{2}

    />

    }

    );

    }

    如果我们通过上面的代码,你可以看到在 AppContext.Consumer 的为我们提供了一个<代码>上下文,其中包含了我们GraphQL数据。我们使用此<代码>上下文通过将其传递到数据丙填充<代码> FlatList 组件。当在咖啡项中的一个用户点击,我们的数据通过导航PARAMS传递给我们的<代码> CoffeePage.js ,允许它在该视图来访问。如果您现在保存修改过的文件并启动应用程序博览会上,你会看到你的完全填充的 FlatList

    概要

    恭喜!您已经成功地使用GraphQL检索数据,并使用本地做出反应呈现该数据。我们已经知道GraphQL查询多么强大就可以了,而对像REST的系统突出的优势。我鼓励你使用GraphQL在你的下一个项目,并判断自己如何更快可用于检索数据 - 尤其是在丰富的数据应用。

    如果你想探索GraphQL进一步的细节,我建议你阅读GraphQL文档的“查询和突变”部分,也许开始使用codesandbox.io编码阿波罗服务器自己。

    该项目的整个代码可以在GitHub上找到,可以随意克隆/叉回购,使自己的改进!

    The finished App
    以上信息来源于网络,如有侵权,请联系站长删除。

    TAG:GraphQL 开始 本土的 作出反应

  • 上一篇:在测试版的离线阅读器SitePoint高级现在:进入离网
  • 与“入门GraphQL和应对本土”相关的资讯
  • 启动商业AI,可以在天然气管道中立即检测泄漏
  • 冰在美国的某些移民的驱逐出境时启动100天。
  • Spring Boot GraphQL 实战 03_分页、全局异常处理和异步加载
  • Spring Boot GraphQL 实战 02_增删改查和自定义标量
  • Spring Boot GraphQL 实战 01_快速入门