TypeError: Cannot read properties of null (reading 'title') - Graphcms - NextJs
TypeError: Cannot read properties of null (reading 'title') - Graphcms - NextJs
在我使用 graphCMS 作为后端的 Next Js 上,当我尝试从服务器获取 [slug].js 中单个项目页面的数据时,出现此错误。但是同一个项目它在 index.js 文件中使用 .map 方法工作。
SS of the error
import { GraphQLClient, gql } from "graphql-request";
const graphcms = new GraphQLClient(
"api url here"
);
const QUERY = gql`
query Project($slug: String!) {
project(where: { slug: $slug }) {
id
slug
title
}
}
`;
export const SLUGLIST = gql`
{
projects {
slug
}
}
`;
export async function getStaticProps({ params }) {
const slug = params.slug;
const data = await graphcms.request(QUERY, { slug });
const project = data.project;
return {
props: {
project,
},
};
}
export async function getStaticPaths() {
const { projects } = await graphcms.request(SLUGLIST);
return {
paths: projects.map((project) => ({ params: { slug: project.slug } })),
fallback: "blocking",
};
}
export default function Project({ project }) {
return (
<div>
<h1>This is single project page</h1>
{/* Project container */}
<div>
<div>
<h1>{project.title}</h1>
</div>
</div>
);
}
据我所知,您的 GraphQL 客户端尚未配置为工作,因为您的 API url 为“api url”。您找不到具有这些设置的项目对我来说很有意义。
考虑捕获项目未定义的情况。您可以在页面中使用类似这样的内容来执行此操作。
if (!project) {
return <> Project not found </>
}
或者在原始代码中是这样的:
<h1>{project?.title || "project title not found"}</h1>
在我使用 graphCMS 作为后端的 Next Js 上,当我尝试从服务器获取 [slug].js 中单个项目页面的数据时,出现此错误。但是同一个项目它在 index.js 文件中使用 .map 方法工作。
SS of the error
import { GraphQLClient, gql } from "graphql-request";
const graphcms = new GraphQLClient(
"api url here"
);
const QUERY = gql`
query Project($slug: String!) {
project(where: { slug: $slug }) {
id
slug
title
}
}
`;
export const SLUGLIST = gql`
{
projects {
slug
}
}
`;
export async function getStaticProps({ params }) {
const slug = params.slug;
const data = await graphcms.request(QUERY, { slug });
const project = data.project;
return {
props: {
project,
},
};
}
export async function getStaticPaths() {
const { projects } = await graphcms.request(SLUGLIST);
return {
paths: projects.map((project) => ({ params: { slug: project.slug } })),
fallback: "blocking",
};
}
export default function Project({ project }) {
return (
<div>
<h1>This is single project page</h1>
{/* Project container */}
<div>
<div>
<h1>{project.title}</h1>
</div>
</div>
);
}
据我所知,您的 GraphQL 客户端尚未配置为工作,因为您的 API url 为“api url”。您找不到具有这些设置的项目对我来说很有意义。
考虑捕获项目未定义的情况。您可以在页面中使用类似这样的内容来执行此操作。
if (!project) {
return <> Project not found </>
}
或者在原始代码中是这样的:
<h1>{project?.title || "project title not found"}</h1>