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

React嵌套子组件中setIsOpen报不是函数的原因与解决方法

React setState报错:"setState不是函数"的原因与修复

问题根源

React组件接收的参数是一个完整的props对象,不是拆分的单个属性。你在Card和CloseBtn组件里把setIsOpen、isOpen作为独立参数写,会导致:

  • 第一个参数实际是整个props对象,不是你要的setIsOpen函数
  • 第二个参数直接是undefined
    传递到孙组件后,setIsOpen自然不是函数,触发报错。

修复代码

只需要给组件参数加上解构语法,把props里的属性拆出来用:

修复Card组件

import React from "react";

const Card = ({ setIsOpen, isOpen }) => {
  return (
    <section className="cards">
      <CloseBtn setIsOpen={setIsOpen} isOpen={isOpen} />
      <div className="cards-content webdesign-content">
        <WebIntro />
        <SkillSection />
        <Seo />
      </div>
    </section>
  );
};

export default Card;

修复CloseBtn组件

import React from "react";

const CloseBtn = ({ setIsOpen, isOpen }) => {
  // 注意:补充buttonClassArr的定义,替换成你实际需要的CSS类名
  const buttonClassArr = "your-button-class";
  return (
    <>
      <button
        onClick={() => {
          console.log(!isOpen);
          setIsOpen(!isOpen);
        }}
        className={buttonClassArr}
      >
        <i>Close</i>
      </button>
    </>
  );
};

export default CloseBtn;

额外提醒:原CloseBtn代码里的buttonClassArr没有定义,修复时记得补充实际的类名,不然会触发新的变量未定义错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:28:18