React工作流

本文介绍了如何使用React Flow渲染工作流,选择react-flow-renderer处理大量节点数据,通过自定义节点样式扩展功能,并详细讲解了节点和连线的API配置。特别强调了关键ID和字符串格式的重要性。

技术选型

领导提到要写个工作流,我们的技术栈是React,翻阅了文档之后在 jsPlumb.js 和 react-flow-renderer 中选择,因为 react-flow-renderer 相对简单,也能达到预期效果,所以选择react-flow-renderer

效果

在这里插入图片描述
在这里插入图片描述

数据格式

因为节点是后端返回的数据列表,可能会达到上千个,所以没有用拖拽的方式,选择用导入的方式。
数据格式为:

[
    {
      data: {id: "BPvugVEM1", label: "名字1", remark: "", edit: ""},
      id: "BPvugVEM1",
      type: "relation",
      position: {x: 0, y: 0},
    },
    {
      data: {id: "BPvugVEM2", label: "名字2", remark: "", edit: ""},
      id: "BPvugVEM2",
      type: "relation",
      position: {x: 0, y: 60},
    },
    {
      data: {id: "BPvugVEM3", label: "名字3", remark: "", edit: ""},
      id: "BPvugVEM3",
      type: "relation",
      position: {x: 0, y: 120},
    }
  ]

当然,这肯定是拿到后端的数据之后做的二次处理。

API

既然使用了新的东西,肯定还是要研究一下,文档又是英文的,所以针对常用的api做了简单整理。

  1. node节点

    <ReactFlow elements={rightSource} nodeTypes={nodeTypes} onNodeDoubleClick={HandleNode}>
                <Controls />    
          </ReactFlow>
    

    在这里插入图片描述
    (1) node节点的相关属性,主要是在nodes对象里面去设置

			id: nodeId,  // 节点id
                data: {
                    label: nodeName,  // 要传入节点的内容
                },
                position: {
                    x: num%2 == 0 ? 25 + 200 * (n - 1 - remender) : 25 + 200 * remender, y: 75 * num
                },  //节点在视图中的位置
                className: status_list[t.status],  // 节点样式,这个很常用
                sourcePosition: num%2 == 0 ? 'left' : 'right',  // 入口位置
                targetPosition: num%2 == 0 ? 'right' : 'left',  //出口位置
                type: 'customnode' //节点类型

(2)那么如果原始节点不符合产品的要求要做拓展,比如在右上角加上节点id,怎么办?
这里就要用到自定义样式

const CustomNode = ({ id, data, sourcePosition, targetPosition }) => (
      <div className="handle-nodes">
        <Handle type="target" position={targetPosition}/>
        <div style={{position: 'absolute', top: '0', left: '2px', fontSize: '12px'}}>{id}</div>
        <div style={{textAlign: 'center', height: '40px', lineHeight: '38px'}}>{data.label}</div>
        <Handle type="source" position={sourcePosition}/>
      </div>
    );
    const nodeTypes = {
      customnode: CustomNode
    }

这里的data就是nodes中定义的节点内容

  1. edges 连线
    除了节点之外最重要的就是连线了
				id: uuidv4(),
                source: t.from,
                target: t.to,
                type: 'smoothstep', //指定连线的类型,常用的 默认为实线,smoothstep为虚线
                arrowHeadType:"arrow", //连线带 箭头
                borderRadius: 10, // 连线的弧度
                label: 'updatable edge', //连线中的文字提示,类似 ——阿巴—— 
                animated: true, //开启动画,当为虚线是常开启动画
                style: {strokeWidth: 2} //这里可以调节连线的粗细
  1. ReactFlow props API
onNodeDoubleClick双击节点
	onNodeClick单击节点
	onNodeDragStart
	onNodeDrag
	onNodeDragStop
	onNodeMouseEnter
	onNodeMouseMove
	onNodeMouseLeave
	onNodeContextMenu
	onNodesDelete
参考文档 https://juejin.cn/post/7058483266533195807#heading-10
参考文档 https://reactflow.dev/docs/api/node-types/

工作流顶级巨坑

要注意的事情是

{ id: '1', data: { label: '-' }, position: { x: 100, y: 100 } },
  { id: '2', data: { label: 'Node 2' }, position: { x: 100, y: 200 } },
  { id: 'e1-2', source: '1', target: '2' },

这个id一定要用字符串,不然会出bug,血泪史啊 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

还要注意一点!
edges 里面的 source: String(t.from), target: String(t.to),
也要用字符串啊 不然更新了线就没了啊 啊啊啊啊啊

如果你要保存工作流,怎么获取工作流的所有信息呢,包括节点位置哦。

这一行代码就能获取所有信息啦

console.log(reactFlowInstance.toObject()) //工作流所有信息

reactFlowInstance 是谁呢?
是画布实例啦
// 画布加载完毕,保存当前画布实例
const onLoad = (instance) => setReactFlowInstance(instance);
这样就把画布上所有的信息都保存到reactFlowInstance啦,当然setReactFlowInstance是reducer,reactFlowInstance是state

<think>好的,用户现在想寻找用于React工作流编排的库,我需要根据之前的引用和现有知识来推荐合适的库。首先,回顾之前的引用,用户提到了Spring AI Alibaba Graph和LangChain,但这些似乎和React前端库关系不大。用户可能需要的是在React应用中管理和编排前端工作流的工具。 首先,我需要明确“工作流编排”在React中的具体应用场景。通常这可能涉及状态管理、异步操作处理、复杂UI流程控制等。例如,处理多步骤表单、状态机管理、或者复杂的用户交互流程。 接下来,我需要考虑React生态中常用的库。XState是一个基于状态机的库,适合管理复杂的状态逻辑,可以用于工作流编排。React Workflow可能是一个专门处理工作流的库,但需要确认其存在性和维护情况。Zustand和Redux通常用于状态管理,但可能需要结合其他工具来实现工作流React Query主要用于数据获取和同步,可能不直接相关,但可以辅助异步操作。 然后,需要验证每个推荐的库是否符合工作流编排的需求。例如,XState支持状态图,适合定义明确步骤和转换的工作流。Redux Saga处理副作用和异步流程,适合需要复杂中间件的情况。Zustand轻量,适合简单状态管理。React Query可能用于数据获取的工作流部分。 同时,用户可能希望库有良好的文档和社区支持,因此需要推荐流行且维护良好的库。可能需要排除一些不相关或过时的库,比如MobX虽然有用,但更多是状态管理而非工作流。 最后,结合用户提到的智能体和工作流编排的引用,虽然引用中的内容主要在后端或AI领域,但可以借鉴其概念,比如多步骤处理和任务拆解,对应到前端可能需要类似的流程控制库。因此,总结出XState、Redux Saga、Zustand等作为推荐,并给出适用场景,帮助用户根据具体需求选择。</think>在 React 生态中,工作流编排主要聚焦于复杂交互状态管理、异步任务调度和多步骤流程控制。以下是针对不同场景的推荐方案: ### 一、核心工作流编排方案 1. **XState (推荐指数 ★★★★★)** - 基于有限状态机(FSM)理论实现 - 可视化工具([xstate.js.org/viz](https://xstate.js.org/viz/))支持流程图生成 - 支持嵌套状态、并行状态、延迟事件等特性 ```jsx import { createMachine, interpret } from 'xstate'; const checkoutFlow = createMachine({ id: 'checkout', initial: 'cart', states: { cart: { on: { NEXT: 'shipping' } }, shipping: { on: { PREV: 'cart', NEXT: 'payment' } }, payment: { on: { PREV: 'shipping', NEXT: 'review' } }, review: { on: { CONFIRM: 'completed' } }, completed: { type: 'final' } } }); ``` 2. **@react-workflow/core (推荐指数 ★★★★☆)** - 专为 React 设计的 DAG(有向无环图)工作流引擎 - 支持节点间数据传递和条件分支 - 提供可视化编排器组件 ```jsx import { Workflow, Node } from '@react-workflow/core'; <Workflow> <Node id="start" type="input" position={{x:0,y:0}} /> <Node id="approval" type="task" position={{x:200,y:0}} /> <Node id="end" type="output" position={{x:400,y:0}} /> </Workflow> ``` ### 二、辅助工具链 | 工具类型 | 推荐库 | 典型场景 | |----------------|-----------------------|-----------------------------| | 状态管理 | Zustand/Jotai | 跨组件状态共享 | | 异步流程控制 | Redux-Saga/Effector | 复杂异步任务编排 | | 数据获取 | React-Query/SWR | 服务端数据流管理 | | 表单流程 | React-Hook-Form + Wizard | 多步骤表单验证 | ### 三、应用场景示例 1. **电商订单流程** ```js // 使用XState实现订单状态机 const orderMachine = createMachine({ states: { pending: { on: { PAY: 'paid' } }, paid: { on: { SHIP: 'shipped' } }, shipped: { on: { DELIVER: 'delivered' } } } }); ``` 2. **审批工作流** ```jsx // 使用@react-workflow实现多级审批 <Workflow> <ParallelNode id="departmentApproval"> <Node id="techReview" /> <Node id="financeReview" /> </ParallelNode> <Node id="ceoApprove" after="departmentApproval" /> </Workflow> ``` ### 四、选型建议 1. **简单流程**:直接使用 Zustand + React Hook 组合 2. **复杂业务流**:XState + 可视化调试工具 3. **企业级应用**:@react-workflow + 自定义节点库 4. **微前端场景**:结合 Qiankun 实现跨应用工作流 最新趋势显示,2023年发布的 **Workflow v3** 已支持与低代码平台集成,可通过拖拽方式构建复杂业务流程[^1]。建议关注各库的TypeScript支持度和测试工具集成情况,这对长期维护至关重要。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值