首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NextJS getStaticProps()从未调用

NextJS getStaticProps()从未调用
EN

Stack Overflow用户
提问于 2021-09-06 13:21:05
回答 5查看 2.7K关注 0票数 3

我正在制作一个简单的网站,我想从API中获取数据并将其显示在我的组件上。问题是从来没有调用过getStaticProps()方法。

以下是组件的代码:

代码语言:javascript
复制
import React from "react";
import {GetStaticProps, InferGetStaticPropsType} from "next";

type RawProject = {
    owner: string;
    repo: string;
    link: string;
    description: string;
    language: string;
    stars: number;
    forks: number;
}

function Projects({projects}: InferGetStaticPropsType<typeof getStaticProps>) {
    console.log(projects);
    return (
        <section id="projects" className="bg-white p-6 lg:p-20">
            <h1 className="sm:text-4xl text-2xl font-medium title-font mb-4 text-gray-900 pb-6 text-center">
                Quelques de mes projets
            </h1>
            {/*
            <div className="container px-5 mx-auto">
                <div className="flex flex-wrap">
                    {rawProjects.map((project: RawProject) => (
                        <ProjectCard
                            title={project.repo}
                            language={project.language}
                            description={project.description}
                            imageUrl="https://dummyimage.com/720x400"
                            repoUrl={project.link}
                        />
                    ))}
                </div>
            </div>
            */}
        </section>
    );
}

export const getStaticProps: GetStaticProps = async () => {
    console.log("getStaticProps()");
    const res = await fetch("https://gh-pinned-repos-5l2i19um3.vercel.app/?username=ythepaut");
    const projects: RawProject[] = await res.json();
    return !projects ? {notFound: true} : {
        props: {projects: projects},
        revalidate: 3600
    };
}

export default Projects;

完整的代码可以在这里找到:https://github.com/ythepaut/webpage/tree/project-section

我不确定这个问题是由我使用类型记录,还是使用自定义_app.tsx造成的。

我尝试了以下解决方案:

但我不能让它起作用。

有人能帮帮我吗?提前谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2021-09-06 13:44:24

getStaticProps()只允许在页面中使用。

您目前的代码是:

代码语言:javascript
复制
import Hero from "../sections/Hero";
import Contact from "../sections/Contact";
import Projects from "../sections/Projects"; // you cannot call getStaticProps() in this componenet

function HomePage(): JSX.Element {
    return (
        <div className="bg-gray-50">
            <Hero />
            <Projects />
            <Contact />
        </div>
    );
}

export default HomePage;

相反,在getStaticProps()中调用index.tsx并将道具传递给组件,如下所示:

代码语言:javascript
复制
import Hero from "../sections/Hero";
import Contact from "../sections/Contact";
import Projects from "../sections/Projects"; 

function HomePage({data}): JSX.Element {
    return (
        <div className="bg-gray-50">
            <Hero />
            <Projects data={data} />
            <Contact />
        </div>
    );
}

export const getStaticProps: GetStaticProps = async () => {
    console.log("getStaticProps()");
    const res = await fetch("https://gh-pinned-repos-5l2i19um3.vercel.app/?username=ythepaut");
    const projects: RawProject[] = await res.json();
    return !projects ? {notFound: true} : {
        props: {projects: projects},
        revalidate: 3600
    };
}
export default HomePage;
票数 4
EN

Stack Overflow用户

发布于 2021-09-06 13:44:28

NextJs (如getStaticProps )中的数据获取方法仅在服务器上运行。因此,只在页面中工作,而不是在常规的react组件中工作。

请检查他们的文档

对于普通组件中的数据提取,您只能进行客户端呈现。NextJS建议使用此库SWR

根据他们的医生

SWR是一种策略,它首先从缓存(stale)返回数据,然后发送提取请求(重新验证),最后随最新数据一起来。

票数 4
EN

Stack Overflow用户

发布于 2021-09-06 13:44:41

您只能在getInitialProps**,页面中使用 ** getServerSideProps**,** getStaticProps

我检查了您的项目,发现您的Project.tsx位于一个组件文件夹中,但是需要在pages文件夹中才能使这些函数工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69075289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档