首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Antd Form 实现机制解析

在 to B 业务中,表单页面的需求往往更复杂和定制化,除了上述基本操作,还要处理包括自定义表单组件、表单联动、表单异步检验等复杂场景,在一些大型表单页面中还要考虑性能问题,表单页面的需求往往是新同学摔得第一个跤...本文分为两个部分,第一部分会通过对 Antd Form 源码分析来帮助大家对 Form 整体设计和流程有一个清晰概念,第二部分会分享一些复杂场景解决方案。...FieldsStore 类可以理解为组件数据管理中心,负责数据模型初始化,并提供 Api 对组件数据进行更新和读取,以及获取组件数据校验结果和数据更改状态。...嵌套数据结构收集 FieldStore 内部集成了 lodash/set,可以设置对象路径(eg: a.b.c 或者 a.b[0])为字段值,通过使用对象路径字段,我们可以很方便实现嵌套数据结构值收集...field,在获取表单时候已经被转换成了对应路径结构对象或数组,如下面所示: { nested:{ fieldObj:{ name:'嵌套对象值' }, fieldArray

2.6K20

前端提效 - js 批量导出 excel 为zip压缩包

上一篇文章:前端复杂表格导出excel,一键导出 Antd Table 看这篇就够了(附源码)详细介绍了如何实现解析 Antd Table、组装数据和调整表格样式,感兴趣可以先看看。...数据处理还有一点需要注意,因为有的单元格是通过 render 函数渲染,render 函数里可能进行了一系列复杂计算,所以如果 column 中有 render 的话不能直接以 dataIndex...为 key 进行取值,要拿到 render 函数执行后值才是正确。...三、导出包含多个子文件夹、多个excel文件 zip 压缩包 如果文件、文件夹嵌套比较深,可以使用 downloadFiles2ZipWithFolder()方法。...使用示例 如文章开头使用示例,为了方便看清结构,将每个对象 files 值删除,精简之后得到如下结构: downloadFiles2ZipWithFolder({ zipName: '压缩包

3.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

10分钟极速入门dash应用开发

2 初始化项目 有了环境,接下来我们在自己熟悉ide中创建项目进行初始化即可,以我最喜欢用vscode为例(记得事先安装微软官方Python插件),我们先在本地某个位置新建示例工程目录hello-dash...对象 接下来我们需要进行Dash()对象实例化,其具有的其他功能参数我们在今后文章中再分别作详细介绍: app = dash.Dash(__name__) 3.3 为dash应用定义初始元素 在已实例化...Dash()对象app基础上,我们需要为其layout属性进行赋值,作为我们dash应用被访问时,初始化加载页面内容,layout可赋值为单个组件或返回单个组件函数,通常我们会直接将一个html.Div...()组件赋给它: app.layout = html.Div() 在此基础上,我们可以将赋给app.layouthtml.Div()组件作为最外层容器,其他应用初始化时需要加载更多元素,我们可以通过向下嵌套方式传给...、State角色顺序一致即可~ 3.7 更复杂应用示例 掌握了上文所述dash应用最基础概念后,下面我们就可以尝试编写更复杂交互应用场景,譬如下面的简单例子,我们在页面中放置了若干表单输入类组件,

2.1K60

react模态框表单总结

antd表单操作比较细致,功能较多,我们工作中常用无非增加内容表单和编辑表单,增加内容表单初始化时,大部分默认值为null装填,偶尔有一些需要设置初始值,如性别或者一些必选属性。...form上:然后这个form对象上有一些方法可以使用:form.resetFields() form.setFieldsValue( { ...currentTag...})通过这个form我们可以控制表单,但是有些时候表单初始化会有一些操作,使得数据不同步,此时就不能使用上面form一些方法了。...antd中提供了第二种模式,我们可以使用initvalue设置初始值,此时表单初始化时会根据这个值来初始化表单,所有初始化操作都是根据这个值。...以上便是我对模态框表单使用总结,希望对你有所帮助

5210

Form 表单在数栈应用(下):深入篇

后文中所提到 Form 表单均为 Antd 3.x 中 Form 组件,以下简称为 Form 表单。...留心过 Antd 同学可能有印象,Antd 是基于 react-component 组件进行了 UI 封装,文章会以 react-component/form 代码为主。...装饰器可以简单理解为:能对一些 对象 进行修改,然后返回一个被包装过 对象。...综合来看,Form.create(options) 实际上是对我们业务组件进行了一次封装,进行了 Form 相关属性初始化,挂载了一些需要使用方法,并将这些方法添加到 props.form 下。...1.3 validateFields 通常使用 validateFields 方法对我们表单数据进行校验,查看 createBaseForm.js 文件中 validateFields 方法实现后,

84020

Form 表单在数栈应用(下):深入篇

主要介绍 Form 表单创建和 Form表单双向绑定(getFieldDecorator)。 后文中所提到 Form 表单均为 Antd 3.x 中 Form 组件,以下简称为 Form 表单。...留心过 Antd 同学可能有印象,Antd 是基于 react-component 组件进行了 UI 封装,文章会以 react-component/form 代码为主。...装饰器可以简单理解为:能对一些 对象 进行修改,然后返回一个被包装过 对象。...综合来看,Form.create(options) 实际上是对我们业务组件进行了一次封装,进行了 Form 相关属性初始化,挂载了一些需要使用方法,并将这些方法添加到 props.form 下。...1.3 validateFields 通常使用 validateFields 方法对我们表单数据进行校验,查看 createBaseForm.js 文件中 validateFields 方法实现后,

83410

Form 表单在数栈应用(上): 校验篇

校验表单值所有字段 这是在数栈用比较高频,一般在提交表单数据时,先对当前所有表单进行校验,只有全部通过校验才能进行下一步操作。(调接口、联动等操作) 2....校验指定表单域 特定时间点对于指定表单正确性校验,如果指定表单域通过校验方可进行下一步操作。...问题分析:从 antd 使用角度来讲,有域值错误时不应当再继续进行后续操作,但存在这种极限情况,问题是由于自定义校验结果产生,而此自定义校验是存在时效性,所以此时我们应该让自定义校验具有准确性,使用...首先是存在多层 form 嵌套问题,也就是说同一个页面里可能还包含或嵌入多个 form 表单,类似问题核心就在于如何在一个页面中拿到当前容器 form 实例和嵌套 form 示例。...通常思路可能会有两个: 1.用 antd table 新增 components 属性来自定义列表元素,以覆盖默认 table 元素,再在自定义列表元素中使用 form ; 2.将 table 每一行元素都看作一个独立表单

2.1K20

实现一个简单表单校验器

问题提出: 最近笔者在用React+antd做管理后台系统需求时候,碰到了一个问题,就是在同一个antdFormItem下面有多个子数据,那么在表单校验时候某个数据一旦出错,整个FormItem下面的表单组件都会标红...我们目标效果应该是这样: ? 2. 解决方法: Form表单下面是不能嵌套Form表单,所以笔者试着自己写了一个简单表单校验器。虽然有点简陋,但感觉也还有点意思,与大家分享一下。...validator, }; } getField 这个函数略有些复杂,需要对React高阶组件有一定了解 getField(options = {}) {...这里我没有自己写样式,是直接用antd表单校验样式。...是lodash库,用它get方法,获取对象值,非常强大 const callbackCreator = (field) => { return (msg)

96010

Form 表单在数栈应用(上): 校验篇

校验表单值所有字段 这是在数栈用比较高频,一般在提交表单数据时,先对当前所有表单进行校验,只有全部通过校验才能进行下一步操作。(调接口、联动等操作) 2....校验指定表单域 特定时间点对于指定表单正确性校验,如果指定表单域通过校验方可进行下一步操作。...问题分析:从 antd 使用角度来讲,有域值错误时不应当再继续进行后续操作,但存在这种极限情况,问题是由于自定义校验结果产生,而此自定义校验是存在时效性,所以此时我们应该让自定义校验具有准确性,使用...首先是存在多层 form 嵌套问题,也就是说同一个页面里可能还包含或嵌入多个 form 表单,类似问题核心就在于如何在一个页面中拿到当前容器 form 实例和嵌套 form 示例。...: 1.用 antd table 新增 components 属性来自定义列表元素,以覆盖默认 table 元素,再在自定义列表元素中使用 form ; 2.将 table 每一行元素都看作一个独立表单

1.2K20

React 16.x折腾记 - (6) 基于React 16.x+ Antd 3.x封装一个声明式查询组件(实用强大)

new : 引入lodashisEqual进行对象深度比对,降低state合并次数,减少re-render 2018-11-19 : new : 表单提交前,value为空数组不返回,字符串value...json去实现; 整个查询区域用antd表单组件,聚合所有表单数据(自动双向绑定,设置默认值等); 为了降低复杂度,子组件不考虑dva来维护状态,纯靠props和state构建,然后统一把构建表单数据向父级暴露...内部state默认初始化都为空[antd对于日期控件使用null来置空],外部初始化可以用getFieldDecoratorinitialValue,已经暴露 实现功能 使用姿势 <AdvancedSearchForm...启动非input控件自动触发提交props函数 数据源格式 data数据格式基本和antd要求格式一致,除了个别用来判断或者渲染子组件, 字段解释: ctype(controller-type...,运行时类型推断比这个强大多,还不会打包冗余代码 没发布npm , 只是提供我写思路,对您有没有帮助,见仁见智 依赖moment,antd,lodash 可以自行拓展点 比如垂直展示 比如表单校验

11910

【C++】继承 ⑥ ( 继承中构造函数和析构函数 | 类型兼容性原则 | 父类指针 指向 子类对象 | 使用 子类对象 为 父类对象 进行初始化 )

" 公有继承 " 派生类 ( 子类 ) 本质上 具有 基类 ( 父类 ) 完整功能 , 使用 基类 可以解决问题 , 使用 公有继承派生类 都能解决 ; 特别注意 : " 保护继承 " 和..." 应用场景 : 直接使用 : 使用 子类对象 作为 父类对象 使用 ; 赋值 : 将 子类对象 赋值给 父类对象 ; 初始化 : 使用 子类对象 为 父类对象 初始化 ; 指针 : 父类指针 指向...); } 2、使用 子类对象 为 父类对象 进行初始化 定义父类对象 , 可以直接使用 子类对象 进行初始化操作 ; // II....类型兼容性原则 : 使用 子类对象 为 父类对象 进行初始化 Parent parent = child; 3、完整代码示例 #include "iostream" using namespace...类型兼容性原则 : 使用 子类对象 为 父类对象 进行初始化 Parent parent3 = child; // 控制台暂停 , 按任意键继续向后执行 system(

21020

React知识图谱

它可以让你在不编写 class 情况下使用 state 以及其他 React 特性。 规则1:不要在循环,条件或嵌套函数中调用 Hook, 确保总是在你 React 函数最顶层调用他们。...试想这样一个场景,state更新条件复杂,这个时候如果使用useState,那么执行setState函数时候就会比较臃肿,这个臃肿函数也很难实现复用。...这个时候,可以考虑使用useReducer了,把state更新规则写在一个reducer函数中,这样不仅reducer可以复用,并且组件中也没有复杂state修改规则。...useCallback 缓存函数 useMemo 缓存参数 useRef 返回 ref 对象在组件整个生命周期内保持不变。 使用场景如Antd4 Form实现useForm时候。...• 异步 • redux-thunk:使用简单,但是容易形成“嵌套地狱” • redux-saga:使用复杂”,但是能够用同步方式实现异步,内部使用了generator函数,比async await

27620

React 折腾记 - (6) 基于React 16.6 + Antd 3.10.7封装一个声明式查询组件

---- 抽离思路及实现 思路 合并props传递值,尽可能减少传递东西(在组件内部实现默认值合并),把渲染子组件通过遍历json去实现; 整个查询区域用antd表单组件,聚合所有表单数据(自动双向绑定...,设置默认值等); 为了降低复杂度,子组件不考虑dva来维护状态,纯靠props和state构建,然后统一把构建表单数据向父级暴露.....内部state默认初始化都为空[antd对于日期控件使用null来置空],外部初始化可以用getFieldDecoratorinitialValue,已经暴露 ---- 实现功能 支持props...数据源(构建) accumulate: 超过多少个折叠起来 responseLayout:传递对象,响应式 getSearchFormData: 回调函数,拿到表单数据 <AdvancedSearchForm...antd要求格式一致,除了个别用来判断或者渲染子组件, 字段解释: ctype(controller-type:控件类型) attr(控件支持属性) field(受控表单控件配置项) searchItem

2.6K10

React进阶(3)-上手实践Redux-如何改变store中数据

,是一个对象,type字段是确定要做动作,类型,监听表单输入框变化,value是输入框值         const action = {             type: 'handle_Input_Change...这样的话,最终就完成了一次action动作,页面也随之更新了 上面的代码进行了一次action,reducer编写,下面接着继续,做得并不完整,那怎么实现一个添加内容操作呢  输入框表单内添加内容...,是一个对象,type字段是确定要做动作,类型,监听表单输入框变化,value是输入框值         const action = {             type: 'handle_Input_Change...,是一个对象,type字段是确定要做动作,类型,监听表单输入框变化,value是输入框值         const action = {             type: 'handle_Input_Change...一个小小初探,在真正实际项目中,复杂度远不止像这样一个例子,但是作为入门,todolist确实能让自己对Redux有一定认识 也许你会觉得这么个简单例子,竟然这么多代码,使用vue的话,几行代码就搞定了

2.5K30

React 中后台系统多页签实现

在中后台管理类系统中,多页签需求非常普遍,用户常常需要在多个页签内跳转,比如填写表单时去查询某个列表获取一些字段信息再回到表单页面填写。...项目主要对象是提供给科技部门有中后台和流程需求项目组,基于我们项目提供基线工程,可以快速搭建工程,在此基础上根据需求进行开发。...首先说 “tab 模式无法(不适合)进行 url 分享”其实是不成立, url 带路由和参数就能准确跳转到对应页面,这在我们系统和 Vue 多页签系统里都是基本功能;而说浏览器本身有 tabs 就不需要做到网站内部...但目前总结起来仍然存在两个问题,一个是嵌套 Cache Route 内部 Route 无法清除缓存问题,刚才看了一下,这个问题终于有了解,详见 Issue #64 : 嵌套路由无法清楚缓存问题时隔一年才有解法...我们在多页签迭代中增加了相同组件多开功能,这个场景比较常见,比如列表页点击链接跳转到表单页,可以同时打开多个表单,这样在不使用 Redux 是没有什么问题,但是一旦数据存在 Redux 中,多开组件就会有问题

3.1K20
领券