首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在gatsby中使用不同的模板创建页面

在 Gatsby 中,你可以使用不同的模板来创建页面。Gatsby 提供了多种方法来实现这一点,最常见的方法是使用 createPages API 在 gatsby-node.js 文件中动态创建页面,并为每个页面指定不同的模板。

以下是一个详细的步骤指南,展示了如何在 Gatsby 中使用不同的模板创建页面。

1. 创建模板文件

首先,创建不同的模板文件。例如,创建两个模板文件 src/templates/templateA.jssrc/templates/templateB.js

src/templates/templateA.js

代码语言:javascript
复制
import React from 'react';
import { graphql } from 'gatsby';

const TemplateA = ({ data }) => {
  const { markdownRemark } = data;
  const { frontmatter, html } = markdownRemark;

  return (
    <div>
      <h1>{frontmatter.title}</h1>
      <div dangerouslySetInnerHTML={{ __html: html }} />
    </div>
  );
};

export const query = graphql`
  query($slug: String!) {
    markdownRemark(fields: { slug: { eq: $slug } }) {
      frontmatter {
        title
      }
      html
    }
  }
`;

export default TemplateA;

src/templates/templateB.js

代码语言:javascript
复制
import React from 'react';
import { graphql } from 'gatsby';

const TemplateB = ({ data }) => {
  const { markdownRemark } = data;
  const { frontmatter, html } = markdownRemark;

  return (
    <div>
      <h1>{frontmatter.title}</h1>
      <div dangerouslySetInnerHTML={{ __html: html }} />
    </div>
  );
};

export const query = graphql`
  query($slug: String!) {
    markdownRemark(fields: { slug: { eq: $slug } }) {
      frontmatter {
        title
      }
      html
    }
  }
`;

export default TemplateB;

2. 创建 Markdown 文件

src/content 目录下创建一些 Markdown 文件,并在文件的前置数据(frontmatter)中指定模板类型。

src/content/page1.md

代码语言:javascript
复制
---
title: "Page 1"
template: "templateA"
slug: "/page-1"
---

This is the content of Page 1.

src/content/page2.md

代码语言:javascript
复制
---
title: "Page 2"
template: "templateB"
slug: "/page-2"
---

This is the content of Page 2.

3. 配置 gatsby-node.js

gatsby-node.js 文件中,使用 createPages API 动态创建页面,并根据前置数据中的模板类型选择相应的模板。

代码语言:javascript
复制
const path = require('path');

exports.createPages = async ({ graphql, actions }) => {
  const { createPage } = actions;

  const result = await graphql(`
    {
      allMarkdownRemark {
        edges {
          node {
            frontmatter {
              slug
              template
            }
          }
        }
      }
    }
  `);

  if (result.errors) {
    console.error(result.errors);
    return;
  }

  const pages = result.data.allMarkdownRemark.edges;

  pages.forEach(({ node }) => {
    const template = node.frontmatter.template;
    const slug = node.frontmatter.slug;

    createPage({
      path: slug,
      component: path.resolve(`src/templates/${template}.js`),
      context: {
        slug: slug,
      },
    });
  });
};

4. 安装必要的插件

确保你已经安装了必要的插件,如 gatsby-source-filesystemgatsby-transformer-remark,并在 gatsby-config.js 中进行配置。

代码语言:javascript
复制
module.exports = {
  siteMetadata: {
    title: `Gatsby Site`,
  },
  plugins: [
    `gatsby-transformer-remark`,
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        name: `content`,
        path: `${__dirname}/src/content`,
      },
    },
  ],
};

5. 运行 Gatsby 开发服务器

现在,你可以运行 Gatsby 开发服务器,并查看生成的页面。

代码语言:javascript
复制
gatsby develop

访问 http://localhost:8000/page-1http://localhost:8000/page-2,你会看到它们使用了不同的模板。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

用 Gatsby 创建一个博客

Gatsby 是一个令人难以置信的静态站点生成器,它允许使用React作为渲染引擎引擎来搭建一个静态站点,它真正具有现代web应用程序所期望的所有优点。它通过在构建时通过服务器端渲染将动态的 react 组件呈现为静态 HTML 内容。这意味着您的用户可以获得静态站点的所有好处,比如不使用JavaScript、搜索引擎友好性、非常快的加载速度等等,也并没有失去现代web所期望的活力和交互性。一旦呈现为静态 HTML,客户端站点的React和JavaScript会接管它并添加动态的内容。 Gatsby 最近发布了v1.0.0,推出了很多新特性。包括(但不限于)使用GraphQL创建内容查询的能力,与各种cms集成——包括WordPress、Contentful、Drupal等等。还有基于路由的代码分布使得用户体验更佳。在这篇文章中,我们将深入探讨 Gatsby 和一些新特性,并创建一个静态博客。让我们开始吧!

03
  • 领券