首页 > 解决方案 > React 中的理智:我如何获取与一个项目相关的许多学生???(许多作者到 1 块)

问题描述

我正在使用 Sanity 在 React 中开发一个投资组合网站。这两个组件对象是学生和项目。在主页上,我可以单击指向特定项目的链接,这会路由到显示单个项目的另一个页面。此外,在这个单一页面上,我想展示所有参与过这个项目的学生。通过 sanity studio,我创建了必要的关系。

但是,无论我单击哪个项目,它都会显示所有学生,无论他们是否相关。我怀疑我在我的 Sanity.fetch 中做错了什么。这是来自我的 SingleProject 组件,我想要关于项目和相关学生的数据(一对多)

  .fetch(
    `*[slug.current == "${slug}"] {
  title,
  _id,
  slug,
  mainImage{
    asset->{
      _id,
      url
    }
  },
  body,
  description,
  tags,
  "students": *[_type == "student" && project._ref in *[_type=="project" && title == title ]._id ]{
    name,
    mainImage{
      asset->{
        id,
        url
      }
    },
    "slug": slug.current,

  }
}`

这是来自我的项目模式,它引用了学生模式中的学生。

导出默认{名称:'项目',标题:'项目',类型:'文档',字段:[ {标题:'学生',名称:'学生',类型:'数组',:[ {类型:'参考', to: [{ type: 'student' }], }, ], },

我不知道为什么它会获取项目组件中的每个学生。有人可以帮忙吗?

标签: sanity

解决方案


经过长时间的研究,我找到了答案。

  useEffect(() => {
    sanityClient
      .fetch(
        `*[slug.current == "${slug}"] {
      title,
      _id,
      slug,
      mainImage{
        asset->{
          _id,
          url
        }
      },
      body,
      description,
      tags,
      "projects": *[_type=='project' && references(^._id)]{
        title,
        mainImage{
          asset->{
            id,
            url
          }
        }
      },
        "slug": slug.current
    }`
      )
      .then((data) => setSingleStudent(data[0]))
      .catch(console.error);
  }, [slug]);`enter code here`

推荐阅读