react 封装树形组件

在这里插入图片描述

TreePage.js
import React, { Component } from "react";
import TreeNode from "../components/TreeNode";
const treeData = {
  key: 0, //标识唯一性
  title: "全国", //节点名称显示
  children: [
    //子节点数组
    {
      key: 6,
      title: "北方区域",
      children: [
        {
          key: 1,
          title: "黑龙江省",
          children: [
            {
              key: 6,
              title: "哈尔滨",
            },
          ],
        },
        {
          key: 2,
          title: "北京",
        },
      ],
    },
    {
      key: 3,
      title: "南方区域",
      children: [
        {
          key: 4,
          title: "上海",
        },
        {
          key: 5,
          title: "深圳",
        },
      ],
    },
  ],
};

export default class TreePage extends Component {
  render() {
    return (
      <div>
        <TreeNode data={treeData} />
      </div>
    );
  }
}

TreeNode.js
import React, { Component } from "react";
// import classnames from "classnames";
import { DownOutlined, RightOutlined } from "@ant-design/icons";
import "../static/css/basic.scss"
export default class TreeNode extends Component {
  constructor(props) {
    super(props);
    this.state = {
      open: false,
    };
  }
  render() {
    const { title, children } = this.props.data;
    const open = this.state.open;
    const hasChildren = children && children.length > 0;
    return (
      <div>
        <div
          className="treeTitle"
          onClick={() => {
            this.setState({ open: !open });
          }}
        >
         { !open && <RightOutlined />}
          {open &&<DownOutlined />}
          <span>{title}</span>
        </div>
        {hasChildren && open && (
          <div className="treeChildren">
            {children.map((item) => {
              return <TreeNode data={item} key={item.key} />;
            })}
          </div>
        )}
      </div>
    );
  }
}

basic.scss
.treeChildren{
 margin-left: 50px;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值