react-flow-node-ts
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseReact Flow Node
React Flow Node
Create React Flow node components following established patterns with proper TypeScript types and store integration.
遵循既定模式创建带有合适TypeScript类型和存储集成的React Flow节点组件。
Quick Start
快速开始
Copy templates from assets/ and replace placeholders:
- → PascalCase component name (e.g.,
{{NodeName}})VideoNode - → kebab-case type identifier (e.g.,
{{nodeType}})video-node - → Data interface name (e.g.,
{{NodeData}})VideoNodeData
从assets/复制模板并替换占位符:
- → 大驼峰式(PascalCase)组件名称(例如:
{{NodeName}})VideoNode - → 短横线式(kebab-case)类型标识符(例如:
{{nodeType}})video-node - → 数据接口名称(例如:
{{NodeData}})VideoNodeData
Templates
模板
- assets/template.tsx - Node component
- assets/types.template.ts - TypeScript definitions
- assets/template.tsx - 节点组件
- assets/types.template.ts - TypeScript 定义
Node Component Pattern
节点组件模式
tsx
export const MyNode = memo(function MyNode({
id,
data,
selected,
width,
height,
}: MyNodeProps) {
const updateNode = useAppStore((state) => state.updateNode);
const canvasMode = useAppStore((state) => state.canvasMode);
return (
<>
<NodeResizer isVisible={selected && canvasMode === 'editing'} />
<div className="node-container">
<Handle type="target" position={Position.Top} />
{/* Node content */}
<Handle type="source" position={Position.Bottom} />
</div>
</>
);
});tsx
export const MyNode = memo(function MyNode({
id,
data,
selected,
width,
height,
}: MyNodeProps) {
const updateNode = useAppStore((state) => state.updateNode);
const canvasMode = useAppStore((state) => state.canvasMode);
return (
<>
<NodeResizer isVisible={selected && canvasMode === 'editing'} />
<div className="node-container">
<Handle type="target" position={Position.Top} />
{/* Node content */}
<Handle type="source" position={Position.Bottom} />
</div>
</>
);
});Type Definition Pattern
类型定义模式
typescript
export interface MyNodeData extends Record<string, unknown> {
title: string;
description?: string;
}
export type MyNode = Node<MyNodeData, 'my-node'>;typescript
export interface MyNodeData extends Record<string, unknown> {
title: string;
description?: string;
}
export type MyNode = Node<MyNodeData, 'my-node'>;Integration Steps
集成步骤
- Add type to
src/frontend/src/types/index.ts - Create component in
src/frontend/src/components/nodes/ - Export from
src/frontend/src/components/nodes/index.ts - Add defaults in
src/frontend/src/store/app-store.ts - Register in canvas
nodeTypes - Add to AddBlockMenu and ConnectMenu
- 将类型添加至
src/frontend/src/types/index.ts - 在中创建组件
src/frontend/src/components/nodes/ - 从导出
src/frontend/src/components/nodes/index.ts - 在中添加默认配置
src/frontend/src/store/app-store.ts - 在画布的中注册
nodeTypes - 添加至AddBlockMenu和ConnectMenu