react插件,树状图(可自由定义子节点结构,大小,样式)

react插件,树状图(可自由定义子节点结构,大小,样式)

如果觉得看下面的代码和说明还没明白,可以直接去github仓库拉代码,源码和说明里面都有(https://github.com/jiangji1/react_tree_j)

先上效果图

效果图

效果图

安装

安装 npm install react_tree_j

引入,使用

import React from 'react';
import ReactTree from './react_tree_j';
function childLayout (props) {
   
  return <div onClick={
    () => {
    props.click(props.path, props.data) } }>
    {
   props.data.agntname} // 或者随便写什么 {props.data.name} 或者直接写123,都行
  </div>
}
class App extends React.Component {
   
  click = (obj) => {
   
    console.log(obj)
  }
  render () {
   
    return <ReactTree data={
   json数据} showAll={
   false} click={
   this.click} childLayout={
   childLayout} size={
   1} />
  }
}
/* 说明(description)
  必传   1.data是一个json数据
  必传   2.childLayout是react的函数组件,返回的dom元素是每个子节点,大小决定树状图的大小, 接受一个对象props(Object类型)
  props.data 是 每个子节点的数据 Object类型
  props.tier 是 第几层级 Number类型
  props.path 是 属于父节点子集的下标
  props.click 是 function,接受2个参数,第1个参数把props.path传入,第2个参数把props.data传入
  childLayout具体参考下面的childLayout函数

  非必传 3.click一个函数,接受一个参数,参数是点击每个子节点数据(是当前点击的节点的所有属性)
  非必传 4.showAll是一个Boolean类型(不是非要布尔类型,js会隐式转换),如果是true,把数据全部显示,如果是false或者不传,就会默认显示数据最左边一列, 只要点击就能切换节点显示
  非必传 5.size是一个Number,如果觉得每一层dom元素拥挤,可以传入数字进行调节每一层的间距
*/
childLayout具体参考这里(先看上面的说明)
// 每一个子节点的结构和样式(最简洁的)
function childLayout (props) {
   
  // 非常重要!非常重要!非常重要!这里的onClick给dom绑定点击事件,复制黏贴就行了,不能改更,只能写成onClick={() => {props.click(props.path, props.data)
  return <div onClick={
    () => {
    props.click(props.path, props.data) } }>
    {
   props.data.agntname} // 或者随便写什么 {props.data.name} 或者直接写123,都行
  </div>
}

// 每一个子节点的结构和样式(src中demo的说明)
function childLayout (props) {
   
  console.log(props)
  // bgcArr是每一层的图标颜色(就是demo的小圆圈的颜色) props.tier就是为了这里每层使用不同颜色,没有其他用处
  let bgcArr = ['#0DC0AF', '#FD71AA', '#41A3FC', '#D086EB', '#F8B551']
  return <div>
    <span>
      // 这里style就是为了设置背景色,不重要
      <div style={
   {
   '--background_color': bgcArr[props.tier % bgcArr.length] || '#fff'}}>
        // 非常重要!非常重要!非常重要!这里的onClick给dom绑定点击事件,复制黏贴就行了,不能改更,只能写成onClick={() => {props.click(props.path, props.data)
        <div className='shu_show_name' onClick={
   () => {
   
        props.click(props.path, props.data)
      }} style={
   {
   backgroundColor: 'var(--background_color)'}}>
        {
   props.data.agtype}
      </div>
      <div className="shu_show_all_name">
        <div>{
   props.data.agntname}</div>
      </div>
      </div>
    <<
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 `bpmn-js` 库来显示 BPMN 流程图,并且结合 `bpmn-js-highlight` 插件来高亮当前节点。 首先,你需要安装 `bpmn-js` 和 `bpmn-js-highlight` 两个库: ``` npm install bpmn-js bpmn-js-highlight ``` 然后在你的 React 项目中引入它们: ```javascript import BpmnModeler from 'bpmn-js/lib/Modeler'; import BpmnViewer from 'bpmn-js/lib/Viewer'; import 'bpmn-js/dist/assets/bpmn-font/css/bpmn.css'; import 'bpmn-js/dist/assets/diagram-js.css'; import 'bpmn-js-highlight/styles/highlight.css'; import bpmnHighlight from 'bpmn-js-highlight'; ``` 其中,`BpmnModeler` 是用于编辑 BPMN 流程图的组件,`BpmnViewer` 是用于显示 BPMN 流程图的组件。 接着在你的 React 组件中使用它们: ```javascript import React, { useEffect, useRef } from 'react'; const BpmnViewerComponent = ({ xml, activeElementId }) => { const containerRef = useRef(null); const viewerRef = useRef(null); useEffect(() => { if (containerRef.current) { viewerRef.current = new BpmnViewer({ container: containerRef.current, additionalModules: [ bpmnHighlight ] }); } }, []); useEffect(() => { if (viewerRef.current && xml) { viewerRef.current.importXML(xml, (err) => { if (err) { console.log('Error rendering BPMN', err); } else { const canvas = viewerRef.current.get('canvas'); const overlays = viewerRef.current.get('overlays'); canvas.zoom('fit-viewport'); if (activeElementId) { const element = viewerRef.current.get('elementRegistry').get(activeElementId); if (element) { overlays.add(activeElementId, 'highlight'); overlays.remove({ type: 'highlight', id: activeElementId }); } } } }); } }, [xml, activeElementId]); return ( <div className="bpmn-container" ref={containerRef}></div> ); }; ``` 其中,`xml` 是 BPMN 流程图的 XML 字符串,`activeElementId` 是要高亮的节点的 ID。 在 `useEffect` 中,我们初始化了 `BpmnViewer` 并且将其实例存储在 `viewerRef` 中。然后在第二个 `useEffect` 中,我们使用 `viewerRef.current.importXML` 方法来加载 BPMN 流程图,并且根据 `activeElementId` 高亮指定的节点。 最后,我们在组件中使用 `BpmnViewerComponent` 来显示 BPMN 流程图: ```jsx <BpmnViewerComponent xml={xml} activeElementId={activeElementId} /> ``` 其中,`xml` 和 `activeElementId` 是从组件的 props 中获取的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值