表单设计器

初衷

固定模板标签没办法满足定制化需求,每次需求变动都需要通过改代码的方式去实现且不能影响到原本功能,那就要整体测试(很麻烦是吧),显然改代码的方式不太实际且效率极低,所以可以通过搭建一个表单设计器满足此类需求,问题不就解决了吗😎,还可以进行数据处理使表单字段更加灵活,本文暂不讨论数据处理模块,可以先想下怎么实现比较合理

技术选型

React 18

React 是 Meta(原 Facebook)开发的用于构建用户界面的 JavaScript 库。

核心特性

  • 并发渲染(Concurrent Rendering):支持异步可中断的渲染机制,提升复杂应用的响应速度。

  • 自动批处理(Automatic Batching):优化状态更新逻辑,减少不必要的渲染。

  • Suspense 增强:支持在服务端渲染(SSR)中更灵活地处理异步加载内容。

  • 新 API:如 useTransitionuseDeferredValue 用于优化用户交互体验。
    适用场景:构建高性能、交互复杂的单页应用(SPA)或服务端渲染应用。

react-dnd

基于 React 的拖放(Drag and Drop)库,用于实现复杂的拖拽交互

核心特性

  • 基于 HTML5 拖放 API:兼容性好,支持移动端和桌面端。

  • 声明式 API:通过 React 组件和高阶组件(如 useDraguseDrop)实现拖放逻辑。

  • 数据驱动:通过传递 item 对象管理拖放内容的数据传递。

  • 灵活性:支持自定义拖放预览、拖放效果和逻辑验证。
    适用场景:看板工具(如 Trello)、表格排序、可视化编辑器等需要拖拽交互的场景。

zustand

轻量级状态管理库,专为 React 设计,提供简洁的状态管理方案

核心特性:

  • 极简 API:通过 create 函数创建 store,使用 useStore hook 消费状态。

  • 无样板代码:相比 Redux,省去了 Actions 和 Reducers 的繁琐定义。

  • 高性能:支持选择器(Selectors)避免不必要的组件渲染。

  • 中间件支持:可集成持久化、日志、Immer(用于不可变数据)等插件。
    适用场景:中小型应用的状态管理,或替代 Redux 的轻量级方案。
    ​​​​​​​

实践

配置拖拽组件

export const generalComponents: ComponentDefinition[] = [
  {
    id: 'text-template',
    type: ComponentType.TEXT,
    category: ComponentCategory.GENERAL,
    name: '文本框',
    icon: 'FontSizeOutlined',
    props: {
    },
  },
  {
    id: 'input-template',
    type: ComponentType.INPUT,
    category: ComponentCategory.GENERAL,
    name: '输入框',
    icon: 'FormOutlined',
    props: {
    },
  },
];

 

组件的配置项

export const componentPropertyConfigs: ComponentPropertyConfig[] = [
  {
    type: ComponentType.TEXT,
    properties: textProperties,
  },
  {
    type: ComponentType.INPUT,
    properties: inputProperties,
  },
  {
    type: ComponentType.QRCODE,
    properties: qrcodeProperties,
  }
];

export const getPropertyConfigByType = (type: ComponentType): PropertyConfig[] => {
  const config = componentPropertyConfigs.find(config => config.type === type);
  return config ? config.properties : [];
};

 

效果图

打印

最后

好啦,简易版的表单设计器就搞完了,可根据需求新增组件😁!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

啊 程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值