javascript - Material-UI:如何在 TreeView 中添加边框

标签 javascript html css reactjs material-ui

在这里,我在 React 中有一个代码。我想在树的左侧显示虚线。
我怎样才能做到这一点?
我需要这样的东西:
enter image description here
而且,我想合并 TreeView 的样式使用此代码:

const StyledTreeItem = withStyles((theme) => ({
        iconContainer: {
            '& .close': {
                opacity: 0.3,
            },
        },
        group: {
            marginLeft: 2,
            paddingLeft: 3,
            borderLeft: `1px dashed ${fade(theme.palette.text.primary, 0.4)}`,
        },
    }))((props) => <TreeItem {...props} />);
Edit https://codesandbox.io/s/green-surf-dcoqr?fontsize=14&hidenavigation=1&theme=dark&file=/src/tree.js:0-2494
"organizationalUnitsList": [
    {
      "organizationalUnitId": "",
      "organizationalUnitName": "A",
      "organizationalUnitsList": [
        {
          "organizationalUnitId": "",
          "organizationalUnitName": "b",
        }
      ]
    },
    {
      "organizationalUnitId": "",
      "organizationalUnitName": "C",
      "organizationalUnitsList": [
        {
          "organizationalUnitId": "",
          "organizationalUnitName": "D",
          "organizationalUnitsList": [
            {
               "organizationalUnitId": "",
               "organizationalUnitName": "e",
            }
         ]
        }
      ]
    },
    {
      "organizationalUnitId": "",
      "organizationalUnitName": "f"
    }
]
现在,我希望 TreeView 不会在 OrganizationalUnitName 处将borderBottom 显示为“A”、“C”和“D”。因为他们将扮演他们 child 的 parent 。我希望 child 显示borderBottom 而不是 parent 。
有多个organizationUnitId。但是每当出现对象数组时,我希望对象显示为子对象而不是父对象。
我怎样才能做到这一点?

最佳答案

docs 中的示例演示如何为 TreeItem 添加垂直边框.要添加水平边框,您可以为每个 TreeItem 创建一个伪元素并使用 absolute位置以正确放置它们。这是一个例子:

import TreeItem, { treeItemClasses } from "@mui/lab/TreeItem";

type StyledTreeItemProps = {
  rootNode?: boolean;
};

const StyledTreeItem = styled(TreeItem)<StyledTreeItemProps>(({ rootNode }) => {
  const borderColor = "gray";

  return {
    position: "relative",
    "&:before": {
      pointerEvents: "none",
      content: '""',
      position: "absolute",
      width: 32,
      left: -16,
      top: 12,
      borderBottom:
        // only display if the TreeItem is not root node
        !rootNode ? `1px dashed ${borderColor}` : "none"
    },

    [`& .${treeItemClasses.group}`]: {
      marginLeft: 16,
      paddingLeft: 18,
      borderLeft: `1px dashed ${borderColor}`
    }
  };
});
用法
<TreeView>
  <StyledTreeItem rootNode nodeId="1" label="Applications">
    <StyledTreeItem nodeId="2" label="Calendar" />
    <StyledTreeItem nodeId="3" label="Drive" />
  </StyledTreeItem>
  <StyledTreeItem rootNode nodeId="8" label="Documents">
    <StyledTreeItem nodeId="9" label="OSS" />
    <StyledTreeItem nodeId="10" label="MUI">
      <StyledTreeItem nodeId="11" label="index.js" />
    </StyledTreeItem>
  </StyledTreeItem>
</TreeView>
现场演示
V5
Codesandbox Demo
V4
Edit 66946584/how-to-customize-the-treeview-in-react-with-material-ui

关于javascript - Material-UI:如何在 TreeView 中添加边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66946584/

相关文章:

jquery - 在悬停/单击时设置背景内部 div

jquery - slider 和菜单 z-index 问题定位

html - 使用 iframe 仅显示来自外部网站的一个 div?

javascript - Angular2 中的深层链接

javascript - 当主要内容距离导航较短时,固定侧导航的 CSS 部分会隐藏

javascript - 如何在不使用ajax的情况下使用html javascript在本地加载文件并显示其内容?

javascript - 有没有办法使用node.js知道mysql表中是否存在行?

javascript - 如何为html中的多个元素设置相同的id

html - 水平滚动问题

html - 当我仅使用 CSS 向下滚动时,如何使导航栏固定在顶部并变得透明?