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

React按钮切换Div可见性:未使用Error Boundaries报错排查

你的代码问题及修正方案

首先明确:「Error Boundaries未使用」的提示并非核心错误,它是因为代码运行时抛出了其他错误,React才提示你可以用Error Boundaries捕获错误。真正的问题出在以下几个地方:

1. 函数组件错误使用this

React函数组件没有实例,不能用this访问属性。你在onClick里写toggleElement(this.id),这里的this是undefined,会直接抛出错误。

另外,onClick如果直接写函数调用(比如onClick={toggleElement(xxx)}),会导致组件渲染时就立即执行该函数,而非点击时执行。正确写法是用箭头函数包裹:

onClick={() => toggleElement(clickedElm)}

2. 直接操作DOM不符合React范式

React的核心是用状态(state)控制UI,而非像原生JS那样直接获取DOM元素修改样式。你应该用useState钩子管理内容的显示状态,替代document.getElementById操作DOM的写法。

3. JSX语法错误

  • React中需用className代替原生HTML的class,按钮上的class="collapsible"要改成className="collapsible"
  • 你的JSX未闭合,return中的<div className="faq-item">和组件本身都缺少闭合标签

修正后的完整代码

import { useState } from 'react';

function FAQ(props) {
  // 用state控制内容显示隐藏
  const [isOpen, setIsOpen] = useState(false);

  const toggleContent = () => {
    setIsOpen(!isOpen);
  };

  return (
    <div className="faq-item">
      <button 
        type="button" 
        className="collapsible" 
        onClick={toggleContent}
      >
        {props.question}
      </button>
      {/* 根据isOpen状态控制display */}
      <div 
        className="content" 
        style={{ display: isOpen ? 'block' : 'none' }}
      >
        <p>{props.answer}</p>
      </div>
    </div>
  );
}

关于Error Boundaries的说明

Error Boundaries是React用来捕获子组件树中抛出的错误、并显示备用UI的组件。你现在无需急着实现它,先修复代码里的语法和逻辑错误,错误提示自然会消失。若之后应用需要处理可能出现的运行时错误,再去实现Error Boundaries即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:35:28