【问题标题】:Fetch Data from Strapi CMS to Next(React.js) Frontend doesn't work从 Strapi CMS 获取数据到 Next(React.js) 前端不起作用
【发布时间】:2021-04-24 09:19:52
【问题描述】:

我目前正在开发一个使用 Strapi 作为 CMS 和在前端的 Next.js(React) 的网站。该网站还有一个图像滑块,其中显然包含图像、标题和描述。这三样东西我现在想从我的名为 Banner (Banners) 的 Strapi Collection Type 中得到。我已经尝试了很多次并阅读了我能找到的每个论坛,但它仍然无法正常工作。 没有错误,但我要显示的数据没有显示在网站上。以下代码来自 \frontend\components\image-slider.js:

import React from "react";

const Slider = ({}) => {

const [banners, setBanners] = React.useState(null);

const getBanners = async() => {
  const res = await fetch("http://localhost:1337/banners");
  const json = await res.json();
  setBanners(json);
}

if(!banners){
  getBanners();
}

 if (typeof window !== 'undefined') {
    // Code for making slider work
    }
    return (
        <div className="img-slider">
            <div className="slide active">
                <div className="info">
                <div>
                    {banners ? banners.map((banner) => (
                        <div key={banner.id}>
                            <h2>{banner.title}</h2>
                        </div>
                    )) : (
                        <div>Loading...</div>
                    )}
                    </div>
                    <p>
                    {banners ? banners.map((banner) => (
                        <div key={banner.id}>
                            <h2>{banner.description}</h2>
                        </div>
                    )) : (
                        <div>Loading...</div>
                    )}
                    </p>
                    {/* <Image></Image>This I haven't tried yet. */}
                </div>
            </div>
            <div className="slide">
                {/* Same code as div before */}
            </div>
                {/* further slides */}
        
            <div className="navigation">
                <div className="btn-navig active"></div>
                <div className="btn-navig"></div>
                <div className="btn-navig"></div>
            </div>
        
        </div>
    )
}

export default Slider;

我目前尝试获取数据的类型来自this StackOverflow answer。 我希望有人能帮助我!非常感谢!

【问题讨论】:

    标签: javascript reactjs next.js content-management-system strapi


    【解决方案1】:

    您必须将您的 API 请求 (getBanners) 放入 useEffect 挂钩中,并将 [] 作为依赖项(仅运行一次 - 加载时),如下所示:

    React.useEffect(() => {
     const getBanners = async() => {
       const res = await fetch("http://localhost:1337/banners");
       const json = await res.json();
       setBanners(json);
     }
    
      getBanners();
    }, [])
    

    【讨论】:

    • 您好,非常感谢您的回答!但不知何故 h2 元素仍然是空的......我是否必须将您的代码块放在 return 语句的下方或上方?目前我的代码如下所示: const [banners, setBanners] = React.useState(null); React.useEffect(() => { const getBanners = async() => { const res = await fetch("localhost:1337/banners"); const json = await res.json(); setBanners(json); } getBanners(); }, []) 还是我在 div 中获取数据的方式有问题?
    • 你能粘贴来自 api 的有效载荷吗?
    • 对不起,你是什么意思?我对 Strapi 很陌生,所以......但这里是关于有效载荷的官方文档。strapi.io/documentation/developer-docs/latest/development/… 以下链接是 api 的链接strapi.io/documentation/developer-docs/latest/…
    • 如果您的“banner.title”未定义或为空,则不会显示。这就是你必须检查横幅对象的原因。
    • 哦,非常感谢!现在它正在工作!我忘了区分大小写。
    猜你喜欢
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    相关资源
    最近更新 更多