ReactFlow自动化布局实战教程

1、创建react xyflow项目

1.创建react项目,见本专栏第一篇文章React Flow快速上手教程-优快云博客

2、安装后端库,启动后端服务

2.新建一个frontend文件夹,将创建的前端文件全部放进frontend文件夹,然后在项目目录下创建一个banckend文件夹,用来存放后端代码。

3.进入项目backend文件夹,安装express库

npm init -y
npm install express

4、在backend文件夹下新建server.js,粘贴以下代码用作后端服务

// server.js
const express = require('express');
const app = express();
const port = 4000;

app.use(express.json());

app.get('/api/graph', (req, res) => {
  const nodes = [
    { id: '1', data: { label: 'Start' }, position: { x: 0, y: 0 } },
    { id: '2', data: { label: 'Process' }, position: { x: 0, y: 0 } },
    { id: '3', data: { label: 'End' }, position: { x: 0, y: 0 } },
  ];

  const edges = [
    { id: 'e1-2', source: '1', target: '2', type: 'smoothstep' },
    { id: 'e2-3', source: '2', target: '3', type: 'smoothstep' },
  ];

  res.json({ nodes, edges });
});

app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

5.启动后端服务

node server.js

3、构建xyflow自动化布局前端

1.安装所需依赖

npm install dagre

1.在frontend文件夹下,新建AutomatedLayout.js文件

import React, { useState, useCallback, useRef, useEffect } from 'react';
import {
  ReactFlow,
  MiniMap,
  Controls,
  Background,
  useNodesState,
  useEdgesState,
  addEdge,
  MarkerType,
} from '@xyflow/react';
import '@xyflow/react/dist/style.css';
import dagre from 'dagre';

const dagreGraph = new dagre.graphlib.Graph();
dagreGraph.setDefaultEdgeLabel(() => ({}));

const nodeWidth = 172;
const nodeHeight = 36;

const getLayoutedElements = (nodes, edges) => {
  dagreGraph.setGraph({ rankdir: 'TB' });

  nodes.forEach((node) => {
    dagreGraph.setNode(node.id, { width: nodeWidth, height: nodeHeight });
  });

  edges.forEach((edge) => {
    dagreGraph.setEdge(edge.source, edge.target);
  });

  dagre.layout(dagreGraph);

  const layoutedNodes = nodes.map((node) => {
    cons
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟大学生666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值