You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用React Hooks展示猫事实API列表仅显示第一条问题求助

问题根因

渲染异常的问题出在接口返回数据的处理逻辑:

  • const [factList] = list.data 此处使用数组解构赋值,仅提取了list.data数组的第一个元素,等价于const factList = list.data[0]
  • 后续setFactList([factList])将单个元素包装为数组存入状态,导致factList始终只有1条数据,最终只渲染第一条内容
修复方案

直接将完整的list.data数组存入状态即可,修改后的getList逻辑如下:

const getList = () => {
  fetch(url)
    .then((res) => res.json())
    .then((list) => {
      console.log('List:', list);
      // 直接把完整的返回数据数组存入状态
      setFactList(list.data)
    })
    .catch((err) => {
      console.log('List ERROR ', err);
    })
}

修改后完整代码如下:

import React, { useState, useEffect } from 'react';

const url = 'https://catfact.ninja/facts?limit=15';

const Index = () => {
    const [factList, setFactList] = useState([]);

    useEffect(() => {
        getList()
    },[]);

    const getList = () => {
        fetch(url)
            .then((res) => res.json())
            .then((list) => {
                console.log('List:', list);
                setFactList(list.data)
            })
            .catch((err) => {
                console.log('List ERROR ', err);
            })
    }

    return (
        <div className='App'>
            <h1>FACT LIST</h1>
            <ul>
                {factList.map((item, index) => 
                    <li key={index}> {item.fact} </li>
                )}
            </ul>
        </div>
    )
}

export default Index
可选优化建议
  • 列表渲染的key属性尽量使用每条数据的唯一标识,当前接口返回的每条数据无唯一id的场景下可暂时使用index,若后续接口新增唯一字段建议替换
  • 可新增加载状态、请求失败兜底提示,提升用户体验

内容的提问来源于stack exchange,提问作者Kblack4290

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:06:03