繁体   English   中英

从 Strapi CMS 获取数据到 Next(React.js) 前端不起作用

[英]Fetch Data from Strapi CMS to Next(React.js) Frontend doesn't work

我目前正在一个网站上使用 Strapi 作为 CMS 和 Next.js(React) 在前端。 该网站还有一张图片 slider 显然包含图片、标题和描述。 这三样东西我现在想从我的名为 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;

我目前尝试获取数据的类型来自这个 StackOverflow 答案 我希望有人能帮助我! 非常感谢!

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

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

  getBanners();
}, [])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM