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

React报错Too many re-renders无限重渲染问题排查求助

React+TypeScript项目触发无限重渲染报错问题

问题描述

开发学校项目时使用React搭配TypeScript,运行时触发报错:Too many re-renders. React limits the number of renders to prevent an infinite loop,不清楚问题根因。尝试使用布尔类型state和简单的Work[]类型状态修复,始终抛出相同的重渲染报错。

关联代码

WorkList组件代码

export default function WorkList(props :any) {
   const id = props.id
   const [works, setWorks] = useState<Work[]>()

    useEffect(()=> {
        if(!works){
            Api.fetchFromAPI(
                HTTP_METHOD.GET,
                `/artist/${id}/worksofart?token=${AuthService.getToken()}`,
                new Headers()
            ).then((listOfWorks) => {
                setWorks(listOfWorks)
            })
        }
    }, [works])

    function renderWorks(work: Work) {
        return <WorkPost work={work}/>
    }

    return !works ? (
        <div>
            <h3>Loading works...</h3>
        </div>
    ) : (
        <div className={"work-panel"}>
            <h3>Works Of Art:</h3>
            <div>
                {works.map(renderWorks)}
            </div>
        </div>
    )
}

Work对象定义

export class Work {
    public id: string;
    public work_name: string;
    public owner: string;
    public description: string;
    public reviews: number;
    public tags: Array<string>
    public content: string
    public fileExtension: string
    public comments: Array<string>;
    public ups: Array<string>;

    constructor(id: string, work_name: string, owner: string, description: string, reviews: number, tags: Array<string>, content: string, fileExtension: string, commments: Array<string>, ups: Array<string>) {
        this.id = id
        this.work_name = work_name
        this.owner = owner
        this.description = description
        this.reviews = reviews
        this.tags = tags
        this.content = content
        this.fileExtension = fileExtension
        this.comments = commments
        this.ups = ups
    }
}

初始排查思路

最初怀疑是works数组体积过大,setWorks执行耗时较长,还没执行完成就再次触发渲染,进而形成循环,该猜测后续未被证实。

最终问题根因

最终定位到错误出在WorkPost组件而非当前WorkList组件,虽然报错提示指向WorkList。问题是WorkPost中存在无控制的state更新,导致不断触发渲染、更新的循环,修复WorkPost中异常的state更新逻辑后问题解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:15:03