目录

Gatsby + Chakra 构建静态站点记录

在开发之前

创建 Gatsby 项目

gastby new

---
Thanks! Here's what we'll now do:

    🛠  Create a new Gatsby site in the folder nav-gatsby-chakra
    🎨 Get you set up to use Emotion for styling your site
    🔌 Install gatsby-plugin-google-analytics, gatsby-plugin-image, gatsby-plugin-react-helmet, gatsby-plugin-sitemap, gatsby-plugin-manifest

在这里选择了诸如 Emotion 等。

添加 Chakra

Chakra 要求 React >= 18.0 而 Gatsby 要求 React 为 17,产生了矛盾。

我自己改成了:

"react": "^18.1.0",
"react-dom": "^18.1.0"

然后倒是安装成功了:

npm i @chakra-ui/gatsby-plugin @chakra-ui/react @emotion/react @emotion/styled framer-motion

此后必须添加配置,才能成功,否则要报错:

// gatsby-config.js
module.exports = {
  plugins: ["@chakra-ui/gatsby-plugin"],
}

开始开发

可供参考的代码

首先,我们在用一个组件库的时候,一般都是粘贴别人写好的代码来学习各个组件的用法,最后才能发挥自己的想象力来达成自己想要的效果。

那么对于 Chakra 来说,他有非常多免费可用的模板,并且有专门的网站来展示:

CSS组件属性 Style Props1

  • Margin and padding:mmymxmtml等。
  • Color and background color:colorbgbgColoropacity等。
  • Gradient:bgGradient等。
  • Typography:fontSizetextAlignfontFamilytextTransform等。
  • 等等。

一些小技巧:

  • width={{md: 680, lg: 800, xl: 1000}},可以指定响应式的元素宽度。但这么做,如果遇到更宽的显示器呢?显然不好,建议 w={'80vw'} ,效果还是好些的。
  • React 在 JSX 表达式中的条件渲染可以使用:&&?,例如 {navItem.href ? <Gatsby.Link to={navItem.href ?? '#'}>{navItem.label}</Gatsby.Link> : <Text>{navItem.label}</Text>},还可以多重嵌套
  • JS 对数组倒序,调用 reverse()函数之后,原来的数组就已经倒序好了,所以还是传递原来的数组,返回的结果传递到 JSX 的组件属性中是没有任何变化
  • JSX 防止XSS攻击,因此要通过字符串显示HTML元素,需使用 dangerouslySetInnerHTMl 属性,是 React 为浏览器 DOM 提供 innerHTML 的替换方案2,例如<div dangerouslySetInnerHTML = {{__html:接口返回的值(包括html代码)}} ></div>
  • JSX 中,由于 for 在 JavaScript 中是保留字,所以 React 元素中使用了 htmlFor 来代替。

免费可用资源