您如何以 Sanity 作为我的后端在 Gatsby 中进行 CRUD

How do you do CRUD in Gatsby with Sanity as my backend

我现在正深入一个新的 Gatsby 4 项目,可能碰壁了。我不知道如何在 Gatsby 中以 Sanity 作为我的后端进行 CRUD。我可以在 Gatsby GraphQL 中进行 GQL 突变吗?我在任何地方都找不到任何示例或教程。

我在 Next.js 的另一个项目 a 中完成了此操作,但我的后端在我的新项目中非常不同。

任何帮助都很棒。

如果您的意思是通过 Gatsby 修改存储在 Sanity 中的数据,然后让 Gatsby 实时显示更新(比重建整个站点更快),那么 Gatsby 不会帮助您做到这一点我知道。相关:

https://github.com/gatsbyjs/gatsby/issues/22012

if you mean using Gatsby data layer and by that the graphql portion of it to apply a crud functionality in your site, then no. Gatsby's data layer is a "one way street" it's designed to pull in data, if you want to use mutations and/or subscriptions, you'll have to use something like Apollo to handle the mutations aspects of the data.

This is a good question! Gatsby data layer exists only during build time. After that, it is transformed into HTML and plain JSON files which you can deploy as a static site.

So at the moment if you want to use Apollo on the client, you need a separate GraphQL server.

Sanity 确实有一个 API 可以用来修改数据: https://www.sanity.io/docs/http-mutations

我不同意。您在 React 中能做的一切都可以在 Gatsby 中完成,因为它是一个基于 React 的框架。

if you mean using Gatsby data layer and by that the graphql portion of it to apply a crud functionality in your site, then no. Gatsby's data layer is a "one way street" it's designed to pull in data, if you want to use mutations and/or subscriptions, you'll have to use something like Apollo to handle the mutations aspects of the data.

这意味着 Gatsby 在构建站点时从源(如 Strapi)获取和收集数据(这是 单向)。您唯一需要考虑的是,由于 Gatsby 的静态性,您将无法根据用户的输入按需(或即时)创建新页面。如果这是您的情况,您将需要触发 webhook 或在服务器中为站点提供服务,就像 Next 和 Gatsby v4 所做的那样。

例如,如果您的用例是显示一些数据库(或 Strapi)字段,manipulate/mutate 它们基于某些用户的 actions/inputs,然后再次获取它们以在屏幕上显示它们您可以轻松地使用任何 Apollo 实现,如本文和许多其他文章所述 (Implementing CRUD in web application using React and GraphQL)。在这种情况下,与使用任何其他 CRA 或 React 站点相比,您不会从使用 Gatsby 中获得很多好处,但可以通过任何一种方式完成。

所以总结一下:

  • 如果您想根据某些用户的操作创建动态页面,Gatsby 帮不上什么忙,因为您需要重新构建站点,因此它无法绕过静态。

  • 如果你想对一些数据进行变异,将它们传回服务器,再显示出来,很容易做到。