Введение
Английский | 简体中文
Настраиваемый конструктор потоковых схем. Возможность регистрации позволяет гибко настраивать узлы, различные типы отображения и формы узлов и т. д.
Попробуйте
https://bytedance.github.io/flow-builder
Github
https://github.com/bytedance/flow-builder
Установка
yarn add react-flow-builder
или
npm install react-flow-builder
Использование
// index.tsx
import React, { useState, useContext } from 'react';
import FlowBuilder, {
NodeContext,
INode,
IRegisterNode,
} from 'react-flow-builder';
import './index.css';
const StartNodeDisplay: React.FC = () => {
const node = useContext(NodeContext);
return <div className="start-node">{node.name}</div>;
};
const EndNodeDisplay: React.FC = () => {
const node = useContext(NodeContext);
return <div className="end-node">{node.name}</div>;
};
const OtherNodeDisplay: React.FC = () => {
const node = useContext(NodeContext);
return <div className="other-node">{node.name}</div>;
};
const ConditionNodeDisplay: React.FC = () => {
const node = useContext(NodeContext);
return <div className="condition-node">{node.name}</div>;
};
const registerNodes: IRegisterNode[] = [
{
type: 'start',
name: 'start node',
displayComponent: StartNodeDisplay,
isStart: true,
},
{
type: 'end',
name: 'end node',
displayComponent: EndNodeDisplay,
isEnd: true,
},
{
type: 'node',
name: 'other node',
displayComponent: OtherNodeDisplay,
},
{
type: 'condition',
name: 'condition node',
displayComponent: ConditionNodeDisplay,
},
{
type: 'branch',
name: 'branch node',
conditionNodeType: 'condition',
},
];
const Demo = () => {
const [nodes, setNodes] = useState<INode[]>([]);
const handleChange = (nodes: INode[]) => {
console.log('nodes change', nodes);
setNodes(nodes);
};
return (
<FlowBuilder
nodes={nodes}
onChange={handleChange}
registerNodes={registerNodes}
/>
);
};
export default Demo;
// index.css
.start-node, .end-node {
height: 64px;
width: 64px;
border-radius: 50%;
line-height: 64px;
color: #fff;
text-align: center;
}
.start-node {
background-color: #338aff;
}
.end-node {
background-color: #666;
}
.other-node, .condition-node {
width: 224px;
border-radius: 4px;
color: #666;
background: #fff;
box-shadow: 0 0 8px rgba(0, 0, 0, 0.08);
}
.other-node {
height: 118px;
padding: 16px;
display: flex;
flex-direction: column;
}
.condition-node {
height: 44px;
padding: 12px 16px;
}
API
Property | Описание | Тип | Требуется | По умолчанию | Версия |
---|---|---|---|---|---|
backgroundColor | Цвет фона | string |
#F7F7F7 | ||
className | Имя класса контейнера | string |
- | ||
draggable | Перетаскивание | boolean |
false | 1.0.0 | |
DragComponent | Пользовательский компонент перетаскивания |
React.FC <DragComponent> |
- | 1.0.0 | |
DropComponent | Пользовательский компонент отбрасывания | - | - | React.FC<DropComponent>, createUuid, DrawerComponent, PopoverComponent, PopconfirmComponent, drawerProps, drawerVisibleWhenAddNode, historyTool, layout, lineColor, nodes, readonly, registerNodes, registerRemoteNodes, showPracticalBranchNode, showPracticalBranchRemove, sortable, sortableAnchor, spaceX, spaceY, zoomTool, onChange — переводятся как «Реакт.эфси», «криэйтив уид», «Дрэвер компонент», «Поповер компонент», «Попконфирм компонент», «дрэвэр пропс», «дравер визабл уэн адд нау», «хистори тул», «лэйаут», «лайн колэр», «наузэс», «реадабл», «рэджистэ нуз», «рэджистэр румот нуз», «шоу практикал бранч нау», «шоу практикал бранч рамэв», «сортибл», «сортибл энч», «спейс икс», «спейс уай», «зум тул» и «он чендж». |
В запросе присутствуют фрагменты кода на языке программирования, которые не удалось перевести. Это связано с тем, что в запросе нет полной информации о структуре и назначении этих фрагментов. dataChange | (nodes: Node[], changeEvent: string
, nodeChanged?: INode) => void | ✓ | - | -
onHistoryChange | | (undoDisabled: boolean, redoDisabled: boolean) => void
| - | - | -
onZoomChange | | (outDisabled: boolean, value: number, inDisabled: boolean) => void
| - | - | -
showArrow | Show arrow | boolean
| false | 1.4.5
arrowIcon | The icon of the arrow | ReactNode
| - | 1.4.5
onAddNodeSuccess | Called when add node success | (type: string, node: INode) => void
| - | 1.4.9
onDropNodeSuccess | Called when drop node success | (type: string, node: INode) => void
| - | 1.4.9
onRemoveNodeSuccess | Called when remove node success | (node: INode) => void
| - | 2.2.0
allowStartConfig | Allow start node config | boolean
| - | 2.1.0
allowEndConfig | Allow end node config | boolean
| - | 2.1.0
scrollByDrag | Scroll by mouse dragging | boolean
| - | 2.6.0
Property | Description | Type | Default |
---|---|---|---|
hidden | boolean |
false | |
max | number |
10 |
Property | Description | Type | Default |
---|---|---|---|
hidden | boolean |
false | |
initialValue | number |
100 | |
min | number |
10 | |
max | number |
200 | |
step | number |
10 |
Property | Description | Type | Version |
---|---|---|---|
onDragStart | The dragStart event of the custom drag component needs to call this method to set the dragged type( dragType in BuilderContext ) | (nodeType: string) => void |
1.0.0 |
onDragEnd | The dragEnd event of the custom drag component needs to call this метод, чтобы очистить перетянутый тип (dragType в BuilderContext) | () => void |
1.0.0 |
Property | Description | Type | Version |
---|---|---|---|
onDrop | The drop event of the custom drop component needs to call this method to add the new node type | () => void |
1.0.0 |
| Property | Description | Type | Version | | | | | | Видимый
Вы можете самостоятельно оценить логическое значение selectedNode.
any 2.0.0
При закрытии
Также вы можете вызвать closeDrawer самостоятельно.
any 2.0.0
Дети
—
any 2.0.0
Заголовок
—
any 2.0.0
Ширина
—
any 2.0.0
Уничтожение при закрытии
—
any 2.0.0
Возможность закрыть маску
—
any 2.0.0
Конфигурационный компонент
Свойство | Описание | Тип | Версия |
---|---|---|---|
Видимый | — | any | 2.0.0 |
При изменении видимости | — | any | 2.0.0 |
Дети | — | any | 2.0.0 |
Имя класса оверлея | — | any | 2.0.0 |
Размещение | — | any | 2.0.0 |
Триггер | — | any | 2.0.0 |
Содержание | — | any | 2.0.0 |
Получить контейнер всплывающего окна | — | any | 2.0.0 |
Подтверждающий всплывающий компонент
Свойство | Описание | Тип | Версия |
---|---|---|---|
Заголовок | — | any | 2.0.0 |
Подтверждение | Вы также можете вызвать removeNode самостоятельно. | any | 2.0.0 |
Дети | — | any | 2.0.0 |
Получить контейнер всплывающего окна | — | any | 2.0.0 |
FlowBuilderInstance
Название | Описание | Тип | Версия |
---|---|---|---|
Добавить | Добавить узел | (узел: INode, newNodeType: string) => void | (newNodeType: string) => void | |
История | Отменить, повторить | (тип: «отменить» | «повторить») => void | |
Удалить | Удалить узлы | (узлы: INode | INode[] = useContext(NodeContext)) => void | |
Увеличить масштаб | Увеличить масштаб | (тип: 'out' | 'in' | число) => void | |
Закрыть ящик | Закрыть ящик | () => void | |
Контекст | BuilderContext | BuilderContext | 1.3.5 |
Formatter
Название | Описание | Тип |
---|---|---|
Построить плоские узлы | Преобразовать в плоские узлы | (параметры: {registerNodes: IRegisterNode[], узлы: INode[]) => INode[] |
Построить древовидные узлы | Преобразовать в древовидные узлы | (параметры: {узлы: INode[]}) => INode[] |
Создать uuid | Создать uuid | (префикс?: строка) => строка |
RegisterNode | Обязательный | По умолчанию | Версия |
---|---|---|---|
addableComponent | React.FC<AddableComponent> | - | |
addableNodeTypes | Список узлов, которые можно добавить ниже узла | string[] | |
addIcon | Значок в списке добавляемых узлов (уже есть несколько значков по умолчанию) | ReactNode | |
addConditionIcon | Значок узла ветвления при добавлении условия (значок по умолчанию уже существует) | ReactNode | |
className | Имя класса узла | string | |
conditionMaxNum | Максимальное количество узлов условий | number | |
conditionNodeType | Тип узла условия | string | |
configComponent | Компонент формы конфигурации узла | React.FC<ConfigComponent> или React.ForwardRefExoticComponent<ConfigComponent & React.RefAttributes> | |
configTitle | Заголовок ящика конфигурации узла | string или ((node: INode, nodes: INode[]) => string) | |
customRemove | Пользовательская кнопка удаления | boolean | false |
Тип | Тип узла. Такой же, как тип зарегистрированного узла | строка |
|
ValidateStatusError | Компонент конфигурации формы узла не прошёл проверку. Компонент отображения может выделить узел в соответствии с этим свойством | логическое значение |
Добавлено начиная с версии V1
В контексте FlowBuilder можно использовать следующие контексты:
Содержит props и состояние. Состояние следующее:
Свойство | Описание | Тип |
---|---|---|
zoomValue | текущее значение масштаба | число |
setZoomValue | установить zoomValue | (zoomValue: число) => void |
historyRecords | записи узлов истории | INode[][] |
setHistoryRecords | установить historyRecords | (records: INode[][]) => void |
activeHistoryRecordIndex | текущий индекс в записях узлов истории | число |
setActiveHistoryRecordIndex | установить activeHistoryRecordIndex | (index: число) => void |
selectedNode | текущий выбранный узел | INode | undefined |
setSelectedNode | установить selectedNode | (node: INode | undefined) => void |
drawerTitle | заголовок Drawer | строка |
setDrawerTitle | установить drawerTitle | (title: строка) => void |
dragType | тип перетаскиваемого узла | строка |
setDragType | установить dragType | (type: строка) => void |
Получить данные узла, где он используется. Подробнее см. Узел
Добавлено начиная с версии V1
В контексте FlowBuilder можно использовать следующие хуки:
Свойство | Описание | Тип | Версия |
---|---|---|---|
clickNode | нажать на узел | (узел: INode = useContext(NodeContext)) => void |
|
addNode | добавить один узел. (Получить текущий узел через NodeContext, если нет свойства узла) |
(узел: INode, newNodeType: строка) => void | (newNodeType: строка) => void
|
|
addNodeInLoop | добавить один узел в цикл узла. | (newNodeType: строка) => void |
1.4.6 |
removeNode | удалить один или несколько узлов. | (targetNode: INode | INode[] = useContext(NodeContext)) => void |
Свойство | Описание | Тип |
---|---|---|
closeDrawer | закрыть Drawer и очистить selectedNode |
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )