原文地址:https://ssshooter.com/2018-12...

使用 Gatsby.js 搭建静态博客 1 关键文件 <-

本文将会介绍如何为初始项目添加分页功能。

理解页面创建原理

上一篇的 gatsby-node.js 介绍部分已经说明了页面生成的方法。

未修改前,首页 index.js 存在于 pages 文件夹,不需要在 gatsby-node.js 使用 createPage 函数生成,因为 createPage 多用于遍历数据批量生成页面。

而我们现在的需求就正好需要用到!文章的分页需要把文章列表分割为每页 N 篇文章的,M 个页面,因此需要使用 createPage

添加分页模板

首先在 templates 文件夹创建 index.js(或者 blog.js,你喜欢)。

文件内容大部分都跟现有的 index.js 一样,但是有以下改动:

添加翻页按钮

// 数据来源是 createPage 注入的上下文变量
const { totalPage, currentPage } = this.props.pageContext······<div>{currentPage - 1 > 0 && (<Linkto={'/blog/' + (currentPage - 1 === 1 ? '' : currentPage - 1)}rel="prev">← 上一页</Link>)}
</div>
<div>{currentPage + 1 <= totalPage && (<Link to={'/blog/' + (currentPage + 1)} rel="next">下一页 →</Link>)}
</div>

在查询中添加分页逻辑

// $skip 和 $limit 的来源也是 context
// 不过可以注意到在查询中这些变量就存在于最外层而不需要访问对象属性获取
export const pageQuery = graphql`query($skip: Int!, $limit: Int!) {site {siteMetadata {titledescription}}allMarkdownRemark(sort: { fields: [frontmatter___date], order: DESC }limit: $limitskip: $skip) {edges {node {excerptfields {slug}frontmatter {date(formatString: "MMMM DD, YYYY")title}}}}}
`

gatsby-node.js 修改生成函数

这里是批量生成分页页面的逻辑,根据每页文章数 postsPerPage 计算生成页面总数,然后向每页注入四个变量,包括:

  • 当前页数
  • 总页数
  • 每次获取数据的数量
  • 跳过前面数据的数量

模板页面有了这些参数便可以方便查询出该页面需要渲染什么文章。

//  create homepage pagination
const postsPerPage = 8
const numPages = Math.ceil(posts.length / postsPerPage)Array.from({ length: numPages }).forEach((_, i) => {createPage({path: i === 0 ? `/blog` : `/blog/${i + 1}`,component: homePaginate,context: {currentPage: i+1,totalPage:numPages,limit: postsPerPage,skip: i * postsPerPage,},})
})

无关主题的突发情况

功能实现了,但是这里有一个突发事件:

原来的页面是这样的:

我什么都没修改怎么就变成这样了?

注释了 <bio /> 发现这块不属于 title,而 helmet 是用于处理 html 元数据,懵逼了一段时间,终于明白是 layout 组件的问题.

layout 组件里面写法是在根目录的时候把 title 放大,但是添加分页之后,主页路由从根目录 / 变为 /blog,于是产生了这个诡异的问题。

不过由于本来就打算重写样式,这一块可以放心删掉!

Next

处理完这个问题你的新博客就实现分页功能了!下一步是样式的相关调整,留到下一篇继续讲

使用 Gatsby.js 搭建静态博客 2 实现分页相关推荐

  1. 使用 Gatsby.js 搭建静态博客 EX 使用语雀发布到博客

    原文链接:https://ssshooter.com/2019-01... 偶然看到通过语雀 webhook 发布文章到 Hexo 静态博客,很方便,实现过程也很有意思.同样的原理可以运用到 Gats ...

  2. 使用 Hexo + Next 搭建静态博客

    欢迎移步我的博客阅读:<使用 Hexo + Next 搭建静态博客> 前言 Github 为广大开发者提供了一个非常好的平台,不仅是代码的开源,同时Github还提供了开发者可以在 Git ...

  3. 使用vuepress搭建静态博客

    什么是vuePress vuePress是以vue驱动的主题系统的简约静态网站生成工具(拥有自己的默认主题). veuPress由vue,vue-router,webpack驱动的单页面应用,每个ma ...

  4. 使用github+hexo搭建静态博客

    npm install hexo -g #安装Hexo npm update hexo -g #升级 hexo init #初始化博客 命令简写 hexo n "我的博客" == ...

  5. pelican搭建静态博客_Pelican入门:基于Python的静态网站生成器

    pelican搭建静态博客 如果要创建自定义网站或博客,则有很多选择. 许多提供商将托管您的网站,并为您完成许多工作. (WordPress是一个非常受欢迎的选项.)但是,使用托管解决方案会失去一些灵 ...

  6. [Pelican] 使用Pelican搭建静态博客

    为什么写博客 一方面是对自己平时工作和学习中收获的自我总结和积累,另一方面,借用知乎的一句话说就是"与世界分享你的知识". 为什么选择Plican 写博客有两种选择: 一种是博客社 ...

  7. Gridea 让你更方便地用 Github Pages 和 Coding Pages 搭建静态博客

    当下大多数人可能已经对 Github Pages 不再陌生,它是很多喜欢写文章的人第一次接触的用于免费搭建博客建一个简洁却又不失优雅的个人博客 ,直到现在互联网上还有大量的基于它的个人博客,也有大量的 ...

  8. umi脚手架搭建的项目_15天零成本搭建静态博客,托管于Github Page

    博客地址 技术栈概览 前台:Umi(路由) + Antd(视图) + TypeScript(增加项目可维护性以及规范性) 后台:Umi(路由) + Antd(视图) + TypeScript(增加项目 ...

  9. 使用Hexo在Github搭建静态博客

    为什么80%的码农都做不了架构师?>>>    1. 环境环境 1.1 安装Git 请参考[1] 1.2 安装node.js 下载:http://nodejs.org/downloa ...

最新文章

  1. Thrift RPC 系列教程(4)——源码目录结构组织
  2. PNAS-2018-根系分泌物香豆素调控微生物群落结构并促进植物健康
  3. DynamicArray
  4. linux服务器管理书籍,linux服务器管理
  5. 【工业控制】What is a Waveform
  6. 如何做Teams Bot的测试覆盖
  7. 【POJ - 1486】Sorting Slides(思维建图,二分图求必须边,关建边,图论)
  8. java 解析时间字符串_Java8解析给定字符串的日期或日期时间格式
  9. memcache 缓存命中率   状态查询
  10. 学习笔记(02):MySQL数据库运维与管理-03-状态变量及查看方法
  11. 用SandCastle为注释生成chm文档
  12. LINUX编译alsa
  13. 2018年的人工智能将如何发展?看看专家怎么说
  14. Unity安卓开发环境搭建
  15. 第一节veeam 10备份系统介绍
  16. Python中numpy的np.where()函数
  17. 内皮细胞生长添加剂(ECGF/ECGS)丨艾美捷解决方案
  18. 高并发下的服务器架构演变
  19. 解决在启动VirtualBox虚拟机时出现“未能启动虚拟电脑Ubuntu,由于下述物理网卡未找到:”的错误
  20. 想学游戏建模要从哪里开始?列出这些工作量,7年建模师想转行了!

热门文章

  1. 最长公共子序列-动态规划(C/C++)
  2. python模拟抛体运动_换个姿势学物理!用Python和Matplotlib进行模拟
  3. Android中英文单词录入背诵软件
  4. php根据某个字段去重,php二维数组根据某个字段去重
  5. redis cluster迁移相关
  6. 智能一代云平台(四十):Maven项目如何将lib下依赖的包打印在manifest文件中
  7. 吴恩达《机器学习训练秘籍》完整中文版,现在可免费下载 | 资源
  8. 活动推荐 | AWS 技术峰会,AI分论坛集齐各路业界大牛,免费开放参与
  9. 机器学习到底能替人干哪些工作?《科学》列出了8条评估标准
  10. 他实现了AlphaGo Zero的算法,发现可能还得训练1700年 | 代码