【问题标题】:Material-UI: How to add border in TreeViewMaterial-UI:如何在 TreeView 中添加边框
【发布时间】:2021-04-04 22:59:08
【问题描述】:

在这里,我有一个 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} />);

"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”。因为他们将扮演他们孩子的父母。我希望孩子显示borderBottom 而不是父母。

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

我该怎么做?

【问题讨论】:

  • 这样的? nimb.ws/MB6HkA合并treeview的样式是什么意思?
  • 是的,完全一样。我在设计中需要一条实线而不是虚线。

标签: javascript html css reactjs material-ui


【解决方案1】:

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

V4

【讨论】:

  • 你可以这样做,当它是父母时,不应该显示边框,但如果有孩子,那么应该显示线条???
  • @progpro 你的意思是根节点?如果有帮助,请查看我的更新答案。
  • 我有一个对象数组,它的键是“OrganizationalUnitId”。我已经用这个新的替换了你的代码“nodeId”部分。但它不起作用。因为在该数组中,也有多个具有对象的数组(将在 TreeView 中充当子对象)。而且我不希望父母显示边框。我想让孩子表现出来。您提供给我的内容仅适用于 nodeId=1 的父级,而不适用于其他数组。怎么做??你还有其他选择吗??如何为多个节点执行此操作?如何告诉 TreeView 有多个节点??
  • 我想为多个节点做这件事。我不想要一个节点,即 nodeId=1。
  • 如果您需要我的任何东西,请告诉我
猜你喜欢
  • 2020-04-10
  • 2020-12-26
  • 1970-01-01
  • 2020-03-22
  • 2021-06-08
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
相关资源
最近更新 更多