我正在尝试显示来自this API的数据。
下面是我的显示数据的代码:
"use client";
import { SearchIcon } from '@heroicons/react/outline'
import React, { useEffect, useState } from 'react'
import News from './News'
import Image from 'next/image';
export default function Widgets({randomUsersResults}) {
const [showPosts, setShowPosts] = useState()
let displayNews;
const URL = "https://saurav.tech/NewsAPI/top-headlines/category/technology/us.json";
async function fetchData() {
const newsData = await fetch(URL);
const newsResults = await newsData.json();
console.log(newsResults)
displayNews = newsResults?.map(function(todo) {
return(
<p key={todo.id}>{todo.title}</p>
)
})
setShowPosts(displayNews)
}
useEffect(() => {
fetchData();
}, [])
const [articleNum, setArticleNum] = useState(3);
字符串
这是HTML代码:
<div className="text-gray-700 space-y-3 bg-gray-100 rounded-xl pt-2 w-[90%] xl:w-[75%]">
<h4 className="font-bold text-xl px-4">What's happening</h4>
{showPosts}
<button onClick={() => setArticleNum(articleNum + 3)} className="text-blue-300 pl-4 pb-3 hover:text-blue-400">
Show more
</button>
</div>
型
Tt应该显示数据,但我得到这个错误:
的数据
2条答案
按热度按时间mrphzbgm1#
这是你的API响应。
的数据
**错误1:**根据图像,
newResults
实际上是一个对象,newResults.articles
是实际的数组。**错误2:**千万不要像这里一样将Html代码保存在usestate变量中:
字符串
现在这段代码应该是:
型
HTML代码应该是
型
y3bcpkx12#
你的React Widgets组件整体看起来不错。但是,我注意到代码中有几个地方可以改进,以获得更好的性能和可维护性。我将提供一些建议来增强您的代码:
1.**解构useState Hook:**在使用 *
useState
* Hook时,最好先解构state变量和setter函数,以提高代码可读性。const [showPosts, setShowPosts] = useState();
个const [articleNum, setArticleNum] = useState(3);
个1.删除未使用的导入:import语句 *
useClient
* 在代码中没有使用,可以安全地删除。1.避免创建全局变量:不使用 *
let displayNews
*,直接在 *fetchData function
* 内部使用 *const displayNews
*。1.直接使用async/await:由于 *
fetchData
* 是一个异步函数,你可以直接在fetch和json调用中使用async/await,使代码更清晰,更容易理解,如下所示:字符串
1.实现错误处理:处理API调用期间可能发生的错误。例如,您可以使用try-catch块来优雅地捕获和处理错误。
1.限制显示的文章数量:考虑使用 *
articleNum
* 状态来限制 displayNews 列表中显示的文章数量。这样,您可以控制显示的文章数量,而无需像这样修改代码:型
通过合并这些建议,您的Widget组件将得到更优化,更易于维护。请记住要优雅地处理错误,限制显示的文章数量,并解构useState Hook以获得更干净的代码。