使用formio和react实现在线表单设计

formiojs 是一个开源的在线表单设计工具,今天看看怎样在 react js 中使用 formiojs。

  1. 首先创建一个react工程
npx create-react-app my-react-formio-app
  1. 安装依赖
cd my-react-formio-app
npm install @formio/react
npm install @formio/js

另外,考虑样式等问题,还安装了下面几个依赖包

npm install bootstrap 
npm install react18-json-view
npm install react-bootstrap
npm install font-awesome
  1. 创建组件

这里创建一个简单的页面组件,主要包括三部分,第一部分是表单设计器,第二部分是表单预览,第三部分是表单JSON数据。

在 src 下创建文件 MyBuilder.js,内容如下:

import { FormBuilder, Form } from "@formio/react";
import { useState } from "react";
import ReactJson from "react18-json-view";
import { Container, Row, Col, Button, Accordion } from "react-bootstrap";const MyBuilder = () => {const [jsonSchema, setSchema] = useState({ components: [] });const onFormChange = (schema) => {setSchema({ ...schema, components: [...schema.components] });};const handleSubmit = (data) => {console.log(data);}return (<><Container><Row><Col ><Accordion defaultActiveKey="0"><Accordion.Item eventKey="0"><Accordion.Header>Builder</Accordion.Header><Accordion.Body><FormBuilder form={jsonSchema} onChange={onFormChange} /></Accordion.Body></Accordion.Item></Accordion></Col></Row><Row><Col ><Accordion defaultActiveKey="0"><Accordion.Item eventKey="0"><Accordion.Header>Form</Accordion.Header><Accordion.Body><Form form={jsonSchema} onSubmit={handleSubmit} /></Accordion.Body></Accordion.Item></Accordion></Col></Row><Row><Col ><Accordion defaultActiveKey="0"><Accordion.Item eventKey="0"><Accordion.Header>JSON Schema</Accordion.Header><Accordion.Body><ReactJson src={jsonSchema} name={null} collapsed={true}></ReactJson></Accordion.Body></Accordion.Item></Accordion></Col></Row></Container></>);
};export default MyBuilder;
  1. 导入并渲染自定义组建

修改 src/App.js 文件,内容如下:

import React from 'react';
import MyBuilder from './MyBuilder';import 'font-awesome/css/font-awesome.min.css';
import 'bootstrap/dist/css/bootstrap.min.css';
import '@formio/js/dist/formio.full.min.css';
import './App.css';function App() {return (<div className="App"><MyBuilder /></div>);
}export default App;
  1. 启动应用
npm start
  1. 访问应用

访问 http://localhost:3000/ 即可看到效果。可以在页面的表单设计中拖动组件,然后在表单预览中查看效果。

参考:
https://github.com/formio/react
https://formio.github.io/react-app-starterkit/#/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/814864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决moviepy保存的视频画质不清晰问题

参考&#xff1a; https://blog.csdn.net/mhack5200/article/details/128666918 https://www.cnblogs.com/LaoYuanPython/p/13643497.html moviepy 函数库很坑&#xff0c;默认值比较低&#xff0c;要提高保存图像的清晰度&#xff0c;提高bitrate就好&#xff0c;这点指定 40…

MyBatis框架使用指南

在Java开发中&#xff0c;数据库操作是常见且关键的任务。为了简化这一任务&#xff0c;我们通常会使用ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;其中MyBatis就是一款非常优秀的选择。MyBatis是一款优秀的持久层框架&#xff0c;它支持定制化SQL、存储过程以及…

通信算法之205 : MSK调制解调

转载&#xff1a; MSK&#xff08;Minimum Shift Keying&#xff09;&#xff1a; MSK调制出现在上世纪六七十年代&#xff0c;因其频率间隔小、恒包络、相位连续、主瓣窄等特性&#xff0c;它在GSM等系统中得到了应用。 随着功放技术的发展及抗衰落方法的不断出现&#xff0c…

UG NX二次开发(C#)-PMI-获取PMI的尺寸数据(二)

文章目录 1、前言2、在UG NX中创建一个带有PMI的三维模型3、查找PMI的数据结构3.1 PMI数据结构3.2 Dimension的数据结构3.3 获取所有的尺寸3.4 完整的代码3.5 测试结果1、前言 在前面写的一个博客中UG NX二次开发(C#)-PMI-获取PMI尺寸数据中介绍了再NX2007中获取尺寸数据的例子…

深入理解JavaScript - JavaScript中call、apply、bind方法

一、call() / apply() JavaScript中的函数是对象&#xff0c;与其他JavaScript对象一样,JavaScript函数也有方法。其中有两个自带的方法 – call和apply&#xff0c;可以利用这两个方法来间接调用某个函数。 通过一个简单的例子体会一下call和apply的用法&#xff1a; funct…

嵌入式学习54-ARM3

S3c2440中断控制器 内部外设&#xff1a; DMA &#xff1a;&#xff08;直接内存存取&#xff09; Direct Memor…

课时94:脚本自动化_脚本信号_信号基础

2.1.1 信号基础 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 简介 当我们在构建一些更高级的脚本的时候&#xff0c;就会涉及到如何在linux系统上来更好的运行和控制它们&#xff0c;到目前为止&#xff0c;我们运行脚本的方式都是以实时…

基于docker的开发者集成环境

docker-compose一键部署开发者环境。 常见的中间件&#xff1a;nginx, mysql, redis, mongo, rabbitmq, nacos, rocketmq, zookeeper等。 GIthub项目地址 1. 下载项目&#xff1a;git clone https://github.com/xhga/docker-develop-env.git 2. 进入文件夹&#xff1a;cd d…

服务器测试之intel E8102CQDA2

这个卡是个双口100G双芯片的卡&#xff0c;QSFP28 单口速率100G&#xff0c;双口200G 1.BIOS下pcie带宽设置 服务器BIOS下支持设置PCIE link width 设置x8x8&#xff0c;否则只能显示一个网口&#xff0c;如下图 E810-2CQDA2需要BIOS下设置该卡槽位pcie slot link width 设置x8…

Paddle实现人脸对比(二)

我之前发过一篇基于孪生网络的人脸对比的文章&#xff0c;这篇文章也到了百度的推荐位置&#xff1a; 但是&#xff0c;效果并不是很好。经过大量的搜索&#xff0c;我发现了一种新的方法&#xff0c;可以非常好的实现人脸对比。 原理分析 我们先训练一个普通的人脸分类模型&…

OpenCV4.10使用形态运算提取水平线和垂直线

目标 在本教程中&#xff0c;您将学习如何&#xff1a; 应用两个非常常见的形态运算符&#xff08;即膨胀和侵蚀&#xff09;&#xff0c;并创建自定义内核&#xff0c;以便在水平轴和垂直轴上提取直线。为此&#xff0c;您将使用以下 OpenCV 函数&#xff1a; erode()dilate…

认识异常(2)

❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&a…

python创建word文档并向word中写数据

一、docx库的安装方法 python创建word文档需要用到docx库&#xff0c;安装命令如下&#xff1a; pip install python-docx 注意&#xff0c;安装的是python-docx。 二、使用方法 使用方法有很多&#xff0c;这里只介绍创建文档并向文档中写入数据。 import docxmydocdocx.Do…

基于生成对抗网络在服装领域的发展脉络和应用趋势

文章目录 1、概述2、深度学习图像生成模型2.1、深度信念网络(Deep belief network&#xff0c;DBN)2.2、变分自编码器(Variational auto-encoder&#xff0c;VAE)2.3、生成对抗网络(Generative adversarial networks&#xff0c;GAN) 3、 模型对比分析4、基于多模态转换的服装图…

nexus搭建maven与docker镜像的私有仓库

引言 通过nexus搭建maven与docker镜像的私有仓库,实现jar包与镜像动态更新、共享、存储。 一、nexus部署 通过docker-compose部署nexus name: java services:#############################环境#############################env-nexus:restart: always## 3.58.1image: so…

代码随想录算法训练营第三十七天| LeetCode 738.单调递增的数字、总结

一、LeetCode 738.单调递增的数字 题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html 状态&#xff1a;已解决 1.思路 如何求得小于等于N的最大单调递增的整数&#xff1f;98&am…

libcurl库与cpp-httplib库区别

1. 介绍 libcurl库 libcurl是一个功能强大的客户端URL传输库&#xff0c;支持多种协议如HTTP、FTP、SMTP等。它提供了丰富的API接口&#xff0c;使得开发者能够使用统一的接口来发送或接收数据。libcurl适用于需要处理多种协议和复杂的网络传输任务的场景&#xff0c;具有高度…

【C语言基础】:编译和链接(计算机中的翻译官)

文章目录 一、翻译环境和运行环境1. 翻译环境1.1 编译1.1.1 预处理1.1.2 编译1.1.3 汇编 1.2 链接 2. 运行环境 一、翻译环境和运行环境 我们在Visual Studio上写的C语言代码其实都是一些文本信息&#xff0c;计算机是不能够直接执行他们的&#xff0c;计算机只能够执行二进制…

第6章 6.4.1 案例一:爬取亚洲各地区的实时时间(MATLAB入门课程)

讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 本案例将引导大家爬取亚洲各地区的实时时间。我们将从下面这个网…

第 128 场 LeetCode 双周赛题解

A 字符串的分数 模拟 class Solution {public:int scoreOfString(string s) {int res 0;for (int i 1; i < s.size(); i) res abs(s[i] - s[i - 1]);return res;} };B 覆盖所有点的最少矩形数目 排序&#xff1a;先按照 x i x_i xi​ 排序&#xff0c;然后顺序遍…