我是使用Gatsby和graphcms的初学者。使用gatsby开发环境从cms提取数据很好,一切都很好。当我通过cms内容添加一些新内容时,我的网站已部署在Netlify上,而这些内容没有更新,也没有获取。
需要cms内容的组件:
import React from "react"
import { StaticQuery, graphql } from "gatsby"
import ServicesMobileProduct from "./ServicesMobileProduct"
const ProductsMobile = () => (
<StaticQuery
query={graphql`
{
product {
products {
id
productName
description
price
amount
}
}
}
`}
render={({ product: { products } }) => (
<>
{products.map(({ productName, description, price, amount, id }) => (
<ServicesMobileProduct
key={id}
productName={productName}
description={description}
price={price}
amount={amount}
/>
))}
</>
)}
/>
)
export default ProductsMobile
答案 0 :(得分:1)
Gatsby是静态站点生成器,这意味着在构建/开发期间,它会收集CMS,markdown,JSON或其他数据源中的所有数据,并在/public
文件夹中创建公共HTML输出。大致遵循以下简化模式:
通常,网站建成后,您需要重新部署它以更新,创建或删除内容,因为网站没有使用这些CMS新更改进行更新。
您要实现的目标称为webhook。 Webhook是一种应用程序在新事件实时发生时通知另一应用程序的方法,例如从源中创建,删除或修改内容。
在盖茨比,某些资源(如DatoCMS)公开了一个Webhook,但这仅在开发模式下有效。 CMS的任何更改都会触发gatsby develop
命令来刷新内容。当然,极不建议仅以自动刷新的方式{@ {1}}上载网站。
在构建模式下,此想法非常相似,但是您需要触发gatsby develop
+部署,而不是运行gatsby develop
命令。如果使用的是Netlify等任何连续部署工具(CD),则可以轻松实现。如果使用的是詹金斯(Jenkins)等持续集成(CI)工具,则需要配置管道来实现它。
实现所需目标的另一种方法是创建对外部API或数据源的异步JavaScript请求,该请求将内容填充到应用程序中。这将在任何环境下都有效,但是您将失去Gatsby带来的所有SEO潜力(和其他潜力)。