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

React组件传参后调用setIsLoading报错,组件定义存疑求助

问题原因及解决方法

你的问题出在React函数组件的参数定义方式上:

React函数组件只会接收一个参数——包含所有传入属性的props对象,而不是分开的多个参数。你现在的写法:

const Item = (product, setIsLoading) => {
    //....
    setIsLoading(true);
}

这里的product其实是整个props对象(包含了你传入的...item和setIsLoading),而第二个参数setIsLoading是undefined,所以调用时才会报setIsLoading is not a function的错误。


修正方法

直接从props对象里解构出需要的属性和方法即可,有两种常用写法:

写法1:直接在参数里解构

// 如果需要把product相关属性单独提取,也可以明确解构,比如{ id, name, price, setIsLoading }
const Item = ({ ...product, setIsLoading }) => {
    // 现在可以正常调用setIsLoading了
    setIsLoading(true);
    // ...其他组件逻辑
}

写法2:先接收props,再内部解构

const Item = (props) => {
    const { setIsLoading } = props;
    // product相关属性可以通过props.id、props.name等访问,或者解构出来
    const product = { ...props };
    delete product.setIsLoading; // 可选,把setIsLoading从product对象里移除

    setIsLoading(true);
    // ...其他组件逻辑
}

之前没加setIsLoading时组件能正常运行,是因为那时候你把整个props对象当成了product来使用,刚好...item的属性都在这个对象里,所以没出问题。但加了新的属性后,错误的参数定义就导致了问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 07:15:42