查询季节json数据_静态网站生成器之React框架Gatsby (三)连接json数据源

前面一篇,我们讲到了替换首页的模板,用antd的首页模板页面。这一篇,我们将使用gatsby的数据源功能,把首页的一些数据从模板页面的js中剥离出来。

这里我们将使用json文件作为gatsby的数据源,所以我们首先需要安装依赖的plugin。

70be01019f1ea7f9e0a9f5619d0f9756.png

安装依赖

一个是starter创建的时候,默认安装的插件,gatsby-source-filesystem插件,这个插件是本地代码的文件系统插件,他会帮你去指定的目录去查找所有的文件,然后我们就可以在graphql中查询目前的所有文件。

85fd1aa7e2d02b43784cfd9e4799b3ca.png

graphql查询所有文件

这里我们可以看到通过http://localhost:8000/___graphql,进入graphql页面,然后就可以通过查询语句

allFile { edges { node { id name relativePath } } }

就可以查询出所有的文件。

gatsby-transformer-json插件是用来把json文件的内容转换成javascript的object使用。

安装好依赖包之后,我们需要修改gatsby-config.js来配置文件系统解析,来查找json文件,上面的结果是配置了json目录之后,才会找到的。

2bbe30218466be07f64dbdc51a66e6bf.png

Gatsby-config.js

这里我们看到,添加了gatsby-transformer-json插件,以及gatsby-source-filesystem插件,并配置了文件系统的名称是json,目录是当前目录下面的data/json下面,所以我们所有的json数据源的存放地址就是data/json下面。

接下来,我们就需要把所有的数据源文件放到json目录下面。

72913b7b4482d57f4e3278c30381b32b.png

json目录tree

7903c70e70f07107ccac3719ae7db609.png

banner_data.json

我们看其中一个json文件示例,banner_data.json,里面就是一个列表,目前我理解的json数据源还只能是列表查询,还不知道一个字典是怎么查询的。gatsby的site的对象是一个字典,就可以直接查询里面的字段。或许有方法,还需要看一下。

接下来,就是怎么查询这个json数据了。

d218385ca8e7f4aec7297d3494ef1cfe.png
allBannerDataJson { edges { node { id name className texty text } }}

在graphql界面,输入的时候会自动提示已有的数据,所有的json的数据都是以all开头来搜索的,其他的数据也是按照这种方法来查询。

知道了查询方法之后,接下来,我们就需要把数据,跟模板页面关联起来,把查询的数据结构传递给页面去渲染了。

在我们的index页面中,我们需要引入graphql支持

import { graphql } from "gatsby";

在IndexPage对象后面,导出查询语句。

37364854855042f388c2e80fda833708.png

graphql query

这样,IndexPage就会传入一个参数名为data,我们直接从data中获取所有的查询结果。

573ca210a49613080d654dfe1a674e07.png

这样,就把数据和页面关联了起来,我们就可以直接把相关的数据传递到不同的组件中使用了。

写完之后,我们就可以直接gatsby build,生成最终的静态页面了。

这里记住,如果是component不是gatsby里的某一个页面的话,一定要放到src/components目录下面,因为所有放到pages下面的js/jsx文件都会被视为独立页面来编译,因为我们components里面用到了父级传来的参数,当被视为page编译的时候,自己就是根页面,所以如果没有引入数据查询的话,不会有任何参数传入,则build的时候会报错,像这样。

d86d1445c47d241bba2ac7e303b3e91d.png

build成功之后,我们就可以本地gatsby serve运行,访问测试了。

049fb9999314c47187b65bff6f175236.png
6fa51478d9268b33ddaaf48d6a70ab77.png

到这,我们就成功实现了把数据用json的格式分离,通过graphql查询,生成静态页面了。下一篇,我们将实现怎么可以只需要一个域名的钱,搭建自己的https的门户介绍网站。谢谢大家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值