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

pro*_*pro 5 html javascript css reactjs material-ui

在这里,我在 React 中有一个代码。我想在树的左侧显示虚线。

我怎样才能做到这一点?

我需要这样的东西:

在此处输入图片说明

而且,我想将 的样式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} />);
Run Code Online (Sandbox Code Playgroud)

编辑 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"
    }
Run Code Online (Sandbox Code Playgroud)

]

现在,我希望 TreeView 在 OrganizationalUnitName 处不将 borderBottom 显示为“A”、“C”和“D”。因为他们将扮演孩子的父母的角色。我希望孩子显示 borderBottom 而不是父母。

有多个organizationalUnitId。但是每当出现对象数组时,我都希望对象显示为子项而不是父项。

我怎样才能做到这一点?

Nea*_*arl 3

本文档中的示例演示了如何向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}`
    }
  };
});
Run Code Online (Sandbox Code Playgroud)

用法

<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>
Run Code Online (Sandbox Code Playgroud)

现场演示

V5

Codesandbox 演示

V4

编辑66946584/如何在react-with-material-ui中自定义treeview