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

如何在MUI的Collapse组件中通过row.name关联对应useState状态?

解决MUI表格行折叠的状态关联问题

不要单独声明openOne这类独立状态,改用对象类型的useState来统一管理所有行的折叠状态,就能通过row.name直接匹配对应行的状态项。

步骤1:初始化对象状态

把单个状态改成键值对形式,键名对应行的name值:

const [openRows, setOpenRows] = useState({});

步骤2:关联Collapse的in属性

直接通过openRows[row.name]获取对应行的折叠状态,默认设为false确保初始是收起状态:

<Collapse in={openRows[row.name] || false} timeout="auto" unmountOnExit>
  {/* 这里放折叠后要展示的内容 */}
</Collapse>

步骤3:实现通用的折叠切换函数

写一个能针对指定行切换状态的函数,通过row.name定位要更新的状态项:

const toggleRowCollapse = (rowName) => {
  setOpenRows(prevState => ({
    ...prevState,
    [rowName]: !prevState[rowName]
  }));
};

步骤4:绑定切换事件(示例)

给每行的展开/折叠按钮绑定上述函数,比如:

<Button onClick={() => toggleRowCollapse(row.name)}>
  {openRows[row.name] ? '收起' : '展开'}
</Button>

为什么不用原来的单个状态?

JSX中无法通过字符串拼接("open"+row.name)直接解析对应变量名,用对象存储状态是更灵活的方案——不管表格有多少行,都能统一管理,不用逐个声明独立状态变量。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:10:25