javascript Sanity CMS数据未显示在react应用程序上

inkz8wg9  于 2023-01-29  发布在  Java
关注(0)|答案(5)|浏览(131)

我在YouTube上看教程(https://youtu.be/3HNyXCPDQ7Q)用于创建一个投资组合网站。我使用Netlify托管网站,20天后当我再次访问网站时,网站只是一个空白屏幕。当我再次在localhost上测试时,问题是sanity。当我连接sanity时,屏幕会变成空白。现在的问题是常规网站内容可见,但是来自sanity的数据没有被提取到react应用。
我已经通过sanity gui在abouts模式中添加了一些文档。
关于方案:

export default {
  name: "abouts",
  title: "Abouts",
  type: "document",
  fields: [
    {
      name: "title",
      title: "Title",
      type: "string",
    },
    {
      name: "description",
      title: "Description",
      type: "string",
    },
    {
      name: "imgUrl",
      title: "ImgUrl",
      type: "image",
      options: {
        hotspot: true,
      },
    },
  ],
};

关于.jsx代码:

import React, { useState, useEffect } from "react";
import { motion } from "framer-motion";

import "./About.scss";
import { urlFor, client } from "../../Client";
import { AppWrapper } from "../../wrapper/";

const About = () => {
  const [abouts, setAbouts] = useState([]);

  const querySelector = async () => {
    const query = '*[_type == "abouts"]';
    const aboutsQuery = await client.fetch(query);

    aboutsQuery.then((data) => setAbouts(data));
  };

  useEffect(() => {
    querySelector();
  }, []);

  return (
    <>
      <motion.div
        className="app__about-header"
        whileInView={{ x: [1000, 0] }}
        transition={{ duration: 1 }}
        viewport={{ once: true }}
      >
        <h1 className="head-text">
          <span>About</span> Me
        </h1>
      </motion.div>
      <motion.div
        className="app__about-desc"
        whileInView={{ opacity: [0, 1] }}
        transition={{ duration: 1 }}
        viewport={{ once: true }}
      >
        <h3 style={{ marginBottom: 10 }}>Who I am?</h3>
        <p className="p-text">
          Some text here.
        </p>
      </motion.div>

      <motion.div
        style={{ marginTop: 40 }}
        whileInView={{ x: [-1000, 0] }}
        transition={{ duration: 1 }}
        viewport={{ once: true }}
      >
        <h2 className="head-text">
          What I <span>Love to do?</span>
        </h2>
      </motion.div>
      <div className="app__profiles">
        {abouts.map((about, index) => {
          return (
            <motion.div
              whileInView={{ opacity: [0, 1] }}
              whileHover={{ scale: 1.1 }}
              transition={{ duration: 1, type: "tween" }}
              className="app__profile-item"
              key={index}
              viewport={{ once: true }}
            >
              <img src={urlFor(about.imgUrl)} alt={about.title} />
              <h2 className="bold-text" style={{ marginTop: 20 }}>
                {about.title}
              </h2>
              <p className="p-text">{about.description}</p>
            </motion.div>
          );
        })}
      </div>
    </>
  );
};

export default AppWrapper(About, "about", "app__whitebg");

此Client.js文件将连接到sanity CMS。Client.js代码:

import SanityClient from "@sanity/client";
import imageUrlBuilder from "@sanity/image-url";

export const client = SanityClient({
  projectId: "hard coded value added here",
  dataset: "portfoliodataset",
  apiVersion: "2022-08-11",
  useCdn: true,
  token: "token value here",
});

const builder = imageUrlBuilder(client);

export const urlFor = (source) => builder.image(source);

我已经尝试了在client.js文件中的env变量。例如,projectId:REACT_APP_SANITY_PROJECT_ID和我也尝试了硬编码的值,两者似乎都不起作用。
请注意,我还在CORS源中添加了localhost:3000和网站URL。
请帮帮我,我在这个问题上已经困了好几天了。

lyfkaqu1

lyfkaqu11#

我不知道你是否被击中了,但给你回复,以防将来有人在这一点上击中,他们可以修复它。我也面临着同样的问题,并罢工了一段时间,后来我意识到这个问题。问题是你不能给予一些随机名称的数据集

export const client = SanityClient({
  projectId: "hard coded value added here",
  dataset: "portfoliodataset",
  apiVersion: "2022-08-11",
  useCdn: true,
  token: "token value here",
});

在此数据集字段中,您必须给予sanity.json文件中的数据集名称。希望对您有所帮助

j2cgzkjk

j2cgzkjk2#

我也遇到了同样的问题,我可以通过以下方法解决它:
1.正在安装dotenv节点程序包
1.正在将.env文件移动到frontend_react文件夹。(我不小心在src文件夹下创建了它)
我希望它也能帮助你。

xyhw6mcr

xyhw6mcr3#

确保您已经导入了密钥并在本地主机上运行了sanity客户端

elcex8rz

elcex8rz4#

我有完全相同的问题,在相同的教程。首先确保你有互联网连接,然后尝试重新启动一切,即使与互联网上。
它基本上是一个网络问题,不能承受任何其他可能的错误原因,但你可以给予它时间,然后稍后刷新react应用程序以及sanity客户端。
你也可以尝试添加更多的代码,给予编译器编译一些新的东西,一些如何应用程序将加载健全。

pwuypxnk

pwuypxnk5#

检查sanity.json或sanity.config.js文件(如果使用的是vite),确保使用的数据集是正确的,它必须与client.js文件中的数据集相匹配
我也有同样的问题

相关问题