react功能点

reactflow流程图

2023-03-16  本文已影响0人  小灰灰_a

背景

作为前端开发,详细各位同学一定遇到过 流程图 的开发需求,那大家都用什么呢?目前市面上用的较多的有 antv/v6 , jsPlumb , gojs 等,今天给大家介绍另外一款好用的工具 reactflow

reactflow简介

React Flow是一个用于构建基于节点的应用程序的库。这些可以是任何东西,从简单的静态图到数据可视化,再到复杂的可视化编辑器。您可以实现自定义节点类型和边,并且它附带了一些组件,如开箱即用的极小图和视口控件。

内置组件

课本儿的东西就大概介绍到这里,下面就让我们自己动手亲自嗦一把,准备好,开始发车了~

npm create vite@latest reactflow-app

使用webpack 可能需要添加如下配置依赖

const rewireBabelLoader = require('craco-babel-loader')

plugins: [
    {
      plugin: rewireBabelLoader,
      options: {
        includes: [/node_modules[\\\/]@?reactflow/],
      },
    },
]

安装依赖

npm install reactflow

现在我们搞一个模板,官方案例

import React, { useCallback } from 'react';
import ReactFlow, {
  MiniMap,
  Controls,
  Background,
  useNodesState,
  useEdgesState,
  addEdge,
} from 'reactflow';

import 'reactflow/dist/style.css';

const initialNodes = [
  { id: '1', position: { x: 0, y: 0 }, data: { label: '1' } },
  { id: '2', position: { x: 0, y: 100 }, data: { label: '2' } },
];
const initialEdges = [{ id: 'e1-2', source: '1', target: '2' }];

export default function App() {
  const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes);
  const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges);

  const onConnect = useCallback((params) => setEdges((eds) => addEdge(params, eds)), [setEdges]);

  return (
    <div style={{ width: '100vw', height: '100vh' }}>
      <ReactFlow
        nodes={nodes}
        edges={edges}
        onNodesChange={onNodesChange}
        onEdgesChange={onEdgesChange}
        onConnect={onConnect}
      >
        <Controls />
        <MiniMap />
        <Background variant="dots" gap={12} size={1} />
      </ReactFlow>
    </div>
  );
}

好了,到现在我们就完成了基本的建设,但是这个案例优点太简陋,我们实际的需求一定不是这样的,所以我们就用到了自定义节点/边,官方有很多案例,大家可以参考;

下面再介绍几个实用的 ReactFlow Instance
注意,想要在custom node等组件中使用这些实例,需要添加 ReactFlowProvider包裹

// index.tsx
<ReactFlowProvider>
    <ReactFlow
        nodes={nodes}
        edges={edges}
        onNodesChange={onNodesChange}
        onEdgesChange={onEdgesChange}
        onConnect={onConnect}
    ></ReactFlow>
 </ReactFlowProvider>
// custemNode.tsx
import { useReactFlow, getOutgoers, } from 'reactflow'
const customNode:FC<any> = (props) => {
  const { getNode, getNodes, getEdges } = useReactFlow()
}

常用的Graph方法 Graph Util Functions

文档内容还是挺多的,这次就先介绍到这里吧,后期有需要再更新~~~~

上一篇 下一篇

猜你喜欢

热点阅读