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

MUI v5 Tree组件:如何取消首个项的折叠事件并移除下拉图标

MUI v5 Tree组件自定义首项样式与事件处理

1. 移除第一个树形项的下拉图标

通过MUI的sx属性直接针对第一个TreeItem的展开图标容器设置隐藏,还可调整内边距让它更贴合普通列表项的视觉效果:

<TreeItem
  nodeId="1"
  label="ALL"
  sx={{
    '&:first-of-type .MuiTreeItem-iconContainer': {
      display: 'none',
    },
    '&:first-of-type .MuiTreeItem-content': {
      paddingLeft: '16px', // 和普通列表项的缩进对齐
    }
  }}
>
  {/* 子项内容 */}
</TreeItem>

2. 取消第一个树形项的折叠/展开事件

在Tree组件的onExpand和onCollapse事件回调中,通过nodeId判断当前操作的是目标项,直接阻止默认行为即可:

const handleExpand = (event, nodeId) => {
  if (nodeId === '1') {
    event.preventDefault();
    return;
  }
  // 其他项的展开逻辑(如果需要)
};

const handleCollapse = (event, nodeId) => {
  if (nodeId === '1') {
    event.preventDefault();
    return;
  }
  // 其他项的折叠逻辑(如果需要)
};

完整可运行示例

import * as React from 'react';
import Tree from '@mui/lab/Tree';
import TreeItem from '@mui/lab/TreeItem';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import ChevronRightIcon from '@mui/icons-material/ChevronRight';

export default function CustomTree() {
  const handleExpand = (event, nodeId) => {
    if (nodeId === '1') {
      event.preventDefault();
      return;
    }
  };

  const handleCollapse = (event, nodeId) => {
    if (nodeId === '1') {
      event.preventDefault();
      return;
    }
  };

  return (
    <Tree
      onExpand={handleExpand}
      onCollapse={handleCollapse}
      defaultCollapseIcon={<ExpandMoreIcon />}
      defaultExpandIcon={<ChevronRightIcon />}
    >
      <TreeItem
        nodeId="1"
        label="ALL"
        sx={{
          '&:first-of-type .MuiTreeItem-iconContainer': {
            display: 'none',
          },
          '&:first-of-type .MuiTreeItem-content': {
            paddingLeft: '16px',
          },
        }}
      >
        <TreeItem nodeId="2" label="Item 1" />
        <TreeItem nodeId="3" label="Item 2" />
      </TreeItem>
      <TreeItem nodeId="4" label="Other Category">
        <TreeItem nodeId="5" label="Sub Item" />
      </TreeItem>
    </Tree>
  );
}

关键说明

  • 样式上通过:first-of-type选择器精准定位第一个TreeItem,避免影响其他项的样式;
  • 事件处理中利用nodeId作为判断标识,调用event.preventDefault()直接阻断默认的折叠/展开行为,确保首项始终保持展开状态且无法触发折叠操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:52:13