GridSome使用介绍

2021-04-08  本文已影响0人  翔子丶
是什么
工作方式
使用场景
备选方案
使用步骤

官网 how-to-install

核心概念

集合存储在临时的本地 GraphQL 数据层中,可以在任何地方查询,过滤,分页或有关系。

部署

https://gridsome.org/docs/deployment/

项目配置

Gridsome 需要 gridsome.config.js 才能工作。插件和项目设置位于此处。基本配置文件如下所示:

module.exports = {
  siteName: 'Gridsome',
  siteUrl: 'https://www.gridsome.org',
  plugins: [],
}

更多配置查看Project configuration

Pages 页面

页面负责在 URL 上显示您的数据。每个页面将静态生成,并具有自己的带有标记的 index.html 文件。

在 Gridsome 中创建页面有两种选择:

页面 meta 信息

Gridsome 使用 vue-meta 处理有关页面的元信息。

<template>
  <div>
    <h1>Hello, world!</h1>
  </div>
</template>

<script>
export default {
  metaInfo: {
    title: 'Hello, world!',
    meta: [{ name: 'author', content: 'John Doe' }],
  },
}
</script>
添加集合

集合可以通过 source plugins 添加,也可以使用 Data Store API 自己添加。

在开发和构建期间,这些集合存储在本地内存数据存储中。节点可以来自本地文件(Markdown,JSON,YAML 等)或任何外部 API。


node-pages.0eae6d2.8581c59dbb258143a7ffcebb617ec5dc-7030007.png

已知有一个业务接口,使用jsonplaceholder 模拟接口创建,将数组或列表展示在页面上

  1. 通过 Post1 放入 created 生命周期,不是服务端静态生成,而是有客户端动态请求到的数据

  2. 所以需要使用集合,集合两个作用

    • 承载数据
    • GridSome 会将集合中的节点(模板)预渲染成页面
  3. 在页面中查询 GraphQL

    • 添加数据源

      // gridsome.server.js
      api.loadSource(async ({ addCollection }) => {
        const posts = addCollection('Post')
      
        // 想要预渲染的数据在这里加载
        const { data } = await axios.get(
          'https://jsonplaceholder.typicode.com/posts'
        )
      
        for (const item of data) {
          posts.addNode({
            id: item.id,
            title: item.title,
            content: item.body,
          })
        }
      })
      
    • 获取数据

      使用 GraphQL 查询数据,http://localhost:8080/___explore对应数据集,使用以下语句查询集合

      query {
         post (id: 1){
              id
              title
              content
        }
      }
      
    • 在代码中使用数据预渲染页面

      page 或 template 中使用<page-query>,其他页面使用<static-query>

      GridSome 会将查询到的数据放在$page.xx.xx 中,访问

  4. 使用模板渲染节点页面

    templates 专门用来渲染节点,默认在templates/{Collection}.vue找集合名称.vue 作为节点模板

    • 创建 templates/Post.vue

    • 在 g 配置

      module.exports = {
        siteName: '拉勾教育', // 网页名称
        siteDescription: '大前端', // 对应meta标签
        plugins: [],
        templates: {
          Post: [
            {
              path: '/posts/:id', // 对应gridsome.server中查询到的节点唯一键
              component: './src/templates/Post.vue',
            },
          ],
        },
      }
      
    • 在模板中拿到对应数据进行展示

      <page-query>
        <! -- 会将传递过来的id作为这里的参数 -->
        query ($id: ID!) { post (id: $id){ id title content } }
      </page-query>
      

      设置 metaInfo

      metaInfo () {
          return {
              title: this.$page.post.title
          }
      }
      
    • 通过 build 打包之后,serve 启动服务,可以看到生成的页面都是静态的(页面刷新时是服务端渲染,路由跳转是客户端渲染)

      image-20210331084458678.png
使用 Data Store API 添加集合

您可以从任何外部 API 手动添加集合。

本示例创建一个名为 Post 的集合,该集合从 API 获取内容并将结果作为节点添加到该集合中。

// gridsome.server.js
const axios = require('axios')

module.exports = function(api) {
  api.loadSource(async (actions) => {
    const collection = actions.addCollection('Post')

    const { data } = await axios.get('https://api.example.com/posts')

    for (const item of data) {
      collection.addNode({
        id: item.id,
        title: item.title,
        content: item.content,
      })
    }
  })
}
处理数据

每个 Gridsome 项目都有一个 GraphQL 资源管理器,可以在开发模式下使用它来探索和测试查询。

在这里,您还将获得所有可用 GraphQL 集合的列表。

通常可以通过转到 http://localhost:8080/___explore 来打开它。

image-20210407174924747.png
查询数据

项目地址

上一篇下一篇

猜你喜欢

热点阅读