Gatsby 学习 - 01 Gatsby 介绍、创建页面

本文详细介绍了Gatsby v3的使用,包括其工作流程、优势、创建项目步骤和关键组件如Link组件。通过数据源、构建过程和编程式创建页面的方法,展示了如何利用Gatsby快速生成SEO友好的静态网站。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文 Gatsby 版本为 v3。

Gatsby

介绍

Gatsby 是一个基于 React 的静态站点生成器。

Gatsby 通过 React 开发应用,当应用开发完成后,Gatsby 可以把这个 React 应用转化成静态的 HTML 应用。

静态应用的优势

  1. 访问速度快
  2. 更利于 SEO 搜索引擎的内容抓取
  3. 部署简单

工作流程

在 Gatsby 应用的工作流程中主要分为了三个部分:

  1. DATA SOURCES - 数据源
    • Gatsby 应用中的数据可以来自 Markdown JSON CMS数据 API 数据等
    • 应用中可以同时存在多个数据源
  2. BUILD - 开发与构建
    • 当开启开发服务器的时候
      • Gatsby 首先会从外部数据源中获取所有的数据
      • 然后把获取到的数据,统一放到 GraphGL 这个数据层当中
      • 当进行页面开发的时候,需要从这个数据层中获取数据
    • 当执行构建命令的时候
      • Gatsby 还是会先从外部数据源中获取数据
      • 然后把所有数据再次放到 GraphGL 数据层当中
      • Gatsby 会把数据层中的数据和页面进行组合生成静态的 HTML 页面
    • 当静态的 HTML 页面生成后,就可以进行部署了
  3. DEPLOY - 部署

在这里插入图片描述

框架特性

  1. 开发体验:基于 React 和 GraphQL,结合了 webpack,babel,react-router 等前端领域中最先进工具。
  2. SEO 友好:采用数据层和 UI 层分离而不失 SEO 的现代前端开发模式。
  3. 用户体验:数据预读取,在浏览器空闲的时候预先读取链接对应的页面内容。使静态页面拥有 SPA 应用的用户体验。
  4. 数据来源多样化:Headless CMS,markdown,API 等
  5. 功能插件化:Gatsby 中提供了丰富且功能强大的各种类型的插件,可以按需安装。

创建 Gatsby 项目

gatsby-cli 要求 nodejs 版本至少是 v12.13.0。

全局安装脚手架工具:

npm install -g gatsby-cli

创建一个自定义站点:

gatsby new [<site-name>]

也可以从 gatsby 提供的模板(官方称为 Starter)克隆:

gatsby new [<site-name> [<starter-url>]]
# gatsby new gatsby-demo https://github.com/gatsbyjs/gatsby-starter-hello-world
# hello-world 只包含一些基本的依赖

启动:

# 切换到站点目录
cd <site-name>
# 启动开发服务器
gatsby develop
# 或 npm start 或 npm run develop 它们实际执行的都是 gatsby develop

# 访问:http://localhost:8000

创建页面

基于文件的路由系统创建页面

Gatsby 框架内置基于文件的路由系统,页面组件被放置在 src/pages 文件夹中。

与 Next.js 不同,组件文件中必须引入 React。

// src\pages\list.js
import React from "react"

export default function List() {
  return <div>List Page</div>
}

访问:http://localhost:8000/list

以编程的方式创建页面

基于同一个模板创建多个 HTML 页面,有多少数据就创建多少页面。

比如,商品详情页面,有多少商品就生成多少商品详情展示页面。

具体方式:

  1. 在项目根目录下创建 gatsby-node.js 文件
    • gatsby-node.js 用于存放 Gatsby Node APIs,用于定制或扩展功能。
    • 该文件中写的都是 Node.js 代码,所以要遵循 CommonJS 模块化规范。
  2. 文件导出对象中添加 createPages 函数
    • 该函数在构建应用时被调用
    • 该函数提供对 createPage 操作的访问,该操作是以编程方式创建页面的核心。
  3. createPages 内部获取模板绝对路径,获取组件所需数据,最终根据模板和数据,调用 createPage 方法,创建页面路由

首先创建一个模板组件:

// src\templates\person.js
import React from "react"

export default function Person(props) {
  console.log(props)
  // pageContext 是传递给模板的数据
  const { pageContext } = props
  const { name, age } = pageContext
  return (
    <div>
      <span>{name}</span>
      <span>{age}</span>
    </div>
  )
}

然后创建 gatsby-node.js

// gatsby-node.js

// 创建页面
function createPages({ actions }) {
  // 获取模板绝对路径
  const template = require.resolve("./src/templates/person.js")
  // 获取组件所需数据
  const persons = [
    {
      slug: "zhangsan",
      name: "张三",
      age: 20,
    },
    {
      slug: "lisi",
      name: "李四",
      age: 30,
    },
  ]
  // 根据模板和数据创建页面
  const { createPage } = actions
  persons.forEach(person => {
    createPage({
      path: `/person/${person.slug}`, // 页面访问地址
      component: template, // 模板绝对路径
      context: person, // 传递给模板的数据
    })
  })
}

module.exports = { createPages }

因为该方法是在构建应用的时候去执行,所以需要重新启动应用。

保存 gatsby-node.js 文件时浏览器也会弹出提示,帮助开发者重启构建:

The develop process needs to be restarted for the changes to gatsby-node.js to be applied.
Do you want to restarted the develop process now?

点击确定等待 Gatsby restart 后即可访问 http://localhost:8000/person/zhangsan

Link 组件

在 Gatsby 框架中页面跳转通过 Link 组件实现。

// src\pages\index.js
import React from "react"
import { Link } from "gatsby"

export default function Home() {
  return <div>
    <Link to="/person/zhangsan">张三</Link>
    <Link to="/person/lisi">李四</Link>
  </div>
}

### 解决 ORIGIN 软件中纵坐标标签与曲线名称冲突的问题 在 Origin 中,当绘制形时如果发现纵坐标轴标签 (y-axis label) 和曲线名称之间存在重叠或冲突的情况,可以通过调整布局设置来解决问题。以下是具体的解决方案: #### 1. **调整 Y 轴标签的位置** Origin 提供了灵活的选项用于控制表中的各个元素位置。可以尝试移动 y-axis 的标签到更合适的地方以减少与其他对象的干扰。 - 打开目标绘窗口。 - 双击左侧的 y-axis 进入 Axis Dialog 设置界面[^1]。 - 切换至 `Title` 页面,在这里能够修改标题文字以及其相对位置参数(如偏移量 Offset)。增加垂直方向上的 offset 值可以让标签远离数据区域从而避免遮挡任何重要细节。 #### 2. **更改曲线名显示方式** 另一种方法是从根本上改变如何呈现每条线的名字——即不直接放置于靠近线条旁边而是采用 legend 表格形式统一罗列出来。 - 首先确认已创建 Legends 对象;如果没有,则点击工具栏里的 Add Legend 标快速生成默认样式legend box. - 接着右键该 legends 并选择 Properties... 来进一步定制外观属性比如字体大小颜色等等. 另外值得注意的是, 如果原始 JSON 数据结构复杂或者不符合预期标准(例如上述提到的大JSON),可能需要借助额外脚本预处理后再导入软件内部使用: ```python import json def process_polygon_positional_label_form(input_json_path): """Process polygon labels into COCO format.""" with open(input_json_path, 'r') as file: data = json.load(file) processed_data = [] for item in data['annotations']: poly_points = item.get('polys', []) # Ensure points follow clockwise order starting top-left corner sorted_poly = sort_clockwise(poly_points) coco_format_item = convert_to_coco(sorted_poly) processed_data.append(coco_format_item) return processed_data def sort_clockwise(points_list): ... ``` 以上代码片段展示了如何按照特定顺序重新排列多边形顶点并转换为目标格式的过程. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值