因此,我试图使用useState钩子中存储的变量从GIPHY筛选和映射一个数组。
这是我的密码
const [gifdata, setGifdata] = useState([])
const [Search, setSearch] = useState("")
function handleChange(e) {
setSearch(e.target.value)
}
useEffect(()=> {
axios.get(`https://api.giphy.com/v1/gifs/trending?api_key=nKEFKPSILLeIlqLEjqhVsRO8ShxIjfcn&limit=50&rating=g`)
.then(res=>{
setGifdata(res.data)
console.log(res.data)
})
}, [])
const filteringSearch = gifdata.filter(gif=>
gif.title.toLowerCase().includes(Search.toLowerCase()))
return (
<div>
<header className="bg-blue-600">
<div className="logo">
<label htmlFor="logo">DejareX</label>
</div>
</header>
<div className="heroSection mx-auto">
<h1>GIF Collections at it's peak</h1>
<p>loremipsum blah blah blah</p>
<input type="text" placeholder="Search For A GIF" onChange = {handleChange} />
{filteringSearch.map(gif => {
return (
<Gif
key = {gif.id}
gifImgSrc = {gif.images.original.webp}
description = {gif.title}
/>
)
})}
</div>
</div>
)
}注意:创建了一个RANDOMEMAIL地址来获取这个API密钥,它不是用于生产的。I是新的反应,请尽量让我通过。
有人说api中的数据可能不是数组,我重新检查了一下,这似乎是真的。因为它在进入数组之前首先返回一个对象,谁可以帮助修复该对象?
发布于 2021-10-13 07:42:26
正如我所说的,res.data不是一个数组。axios向结果添加了另一个data层。因此,您的res.data与您在浏览器中看到的不一样,实际上是:
{data: Array(50), pagination: Object, meta: Object}因此,将res.data改为res.data.data将解决这个问题。
这是一个虚拟的Live Demo
https://stackoverflow.com/questions/69551322
复制相似问题