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

React处理GitHub API数组时遇Uncaught TypeError: data.find is not a function

问题原因

你的报错Uncaught TypeError: data.find is not a function是因为组件第一次渲染时,Getapiinfo返回的是空字符串"",而字符串没有find方法。

虽然API请求完成后data会变成数组,但React组件会先执行初始渲染,这时data还未被API数据更新,Getapiinfo返回的是你设置的默认值"",调用find自然会触发类型错误。

解决方法

1. 修正自定义Hook的初始值与依赖项

修改Getapiinfo,把初始状态设为空数组(而非空字符串),同时补充useEffect的依赖项,确保参数变化时重新请求:

function Getapiinfo(login) {
    const [data, setData] = useState([]); // 初始值改为空数组

    useEffect(() => {
        fetch(`https://api.github.com/users/${login}/repos`)
        .then((response) => response.json())
        .then(setData); 
    }, [login]); // 加入login作为依赖,参数变化时重新请求

    return data;
}

这样即使在数据加载完成前,data也是数组类型,find方法可以安全调用,不会触发报错。

2. 可选:添加加载状态提示(提升用户体验)

如果需要在数据加载期间给用户反馈,可以在组件中判断数组长度:

const RepoList = ({ repos }) => {
    const data = Getapiinfo("egor-no");
    const repo = data.find(item => item.name === "clangametesttask")

    // 数据未加载完成时显示提示
    if (data.length === 0) {
        return <p>加载中...</p>;
    }

    return (
    <>
        <p>{JSON.stringify(repo)}</p>
    </>
    ); 
}

内容的提问来源于stack exchange,提问作者egor-n

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:10:31