最近在维护公司的中台erp系统,项目中js库用的是react,ui库用的是antd。平时还是喜欢自己写css,刚开始还是有点不太习惯直接上ui库做项目,觉得用antd还是挺恶心的,主要是form。...而antd中的form则出了一个类似v-model的类似方法。它不仅仅提供了双向绑定功能,而且它还具有校验,取值,赋值,重置,数据搜集,提交功能。...antd官网 双向绑定:getFieldDecorator 用法:该方法用在表单的子域里面,通过this.props.form.getFieldDecorator(id, options)进行使用,其中...}], })()} 虽然有双向绑定,但是在某些时候,也会用到设置值与获取值的方法,则会使用到setFieldsValue,getFieldsValue...注意:要使用这些api,一定要把对应的 field 用 getFieldDecorator 进行注册。 设置值:setFieldsValue 通过setFieldsValue对其他控件进行赋值。
核心 antd3思想:使用HOC(高阶组件)包裹form表单,HOC组件中的state存储所有的value值,定义设置值和获取值的方法 缺点:动一发牵全身,一个value值改变,因为这是顶级状态,所以所有的子组件都会因父组件的重新...render而render,浪费了性能 antd4思想:使用Context 包裹form表单,自定义一个store类,存储所有的表单value值,定义设置值和获取值得方法,因为不是组件内部状态,需要自己定义更新函数...,在每个Form.Item中定义forceUpdate()强制更新函数,当我们setValue值得时候,根据name值判断出要更新的Form.Item,可以调用该Item的更新函数更新,相比ant3节约了性能...React.forwardRef api, 把当前ref暴露给子组件,在Form lib中导出前 Form/index文件中可以看见包裹...== item); } } // 设置字段值,接收一个对象 setFieldsValue = (newVal) => { this.store =
● validator 在 antd3 时,我们使用 callback 返回报错。但是 antd4 对此做了修改,自定义校验,接收 Promise 作为返回值。...setFieldsValue 设置值: setFieldsValue({ sideTableParam: [ { primaryKey: 'xxx', primaryValue...3)onSelect 清空了值,又会被 onChange 赋值回来。 ・模块复用 在新版的 rc-select 中,antd 官方抽取了一个 generator 方法。...在项目中经常在 TreeItem 中增加参数,如:。...在 antd4 中,还是可以通过 props 找到参数,只不过 antd 会把所有参数使用 data 进行包裹,就需要改成 nodeData.props.data.data。
背景 在前端开发的过程中,一些表单的输入经常需要输入多个内容,如果采用一个输入框+逗号分隔的方式,展示起来不是很清晰,一般需要采用标签的方式 需求 可以指定空状态时的标题 设置标签颜色 每个标签的最大长度...因为有多个标签,先定义一个变量来记录我们已经添加的标签 const [tags, setTags] = useState([]); // 待分隔列表 当鼠标在输入框外部点击或者敲击回车的时候,都需要添加一个标签...给表单设置一下这个值(用分隔标记拼接起来) 隐藏输入框 清空输入框 /* * 新增一个tag * */ const handleInputConfirm = () => { if (inputValue...Tooltip title={tag} key={tag}> {tagElem} ) : ( tagElem ); })} 删除标签 给Tag设置...join(separator) }); }; 编辑状态 当我们处于编辑状态的时候,打开表单后,它原本就有内容了 监听一下表单的内容,如果存在,则使用分隔标记分隔后塞入tags中 useEffect((
在使用React+ant design进行开发时通常使用Form组件,但是很多时候我们某一个字段是二维数组。...atom({ key: "article-list-option", default: { /** 发布人 管理员或者用户*/ auth: undefined, /** 设置正序还是倒序...article_id: undefined, /** 发布者ID*/ author_id: undefined, }, }); 但是表单每个item只对应了一个字段,怎么对多维数组中的每个元素进行设置呢...在仔细阅读文档后发现antd提供了一个list子组件来遍历多维数组。...在开发中只需要采取map对多维数组进行遍历即可: 通过索引值进行条件渲染,或者定义一个数组使用map的index参数进行渲染,不在需要条件判断。使用field中提供的key也可以,也是索引值。
扑街第一步:antd4-codemod 运行 antd4-codemod src 控制台: 出师未捷身先死 问题不大, 我们老实人不怕这个。 缺少core-js, 那就装一个。...: { setFieldsValue } }) => { React.useEffect(() => { setFieldsValue({ username: 'Bamboo',...你每次确定的时候重置的值其实都是上一次的, 所以不会变 偏右的回复: resetFields 是重置回 initialValues 的值,并且 initialValues 只用于第一次初始化,不响应后续的变化...editors=0011 在官网中, 也找到了这样的描述: 在 v3 版本中,修改未操作的字段 initialValue 会同步更新字段值,这是一个 BUG。...但是由于被长期作为一个 feature 使用,因而我们一直没有修复。在 v4 中,该 BUG 已被修复。initialValue 只有在初始化以及重置表单时生效。
前言 在cms后台管理系统中,大家一定绕不开对Form表单的使用,接下来我们就来详细解析下Antd4 Form的背后实现以及数据仓库的知识。...这个时候可以使用React中跨层级数据传递Context。...那么现在我们其实要做的就是加上注册组件更新,监听this.store,一旦this.store中的某个值改变,就更新对应的组件。...,我们已经基本上实现了一个Antd4 Form表单~ 当然,如果你想到里结束也可以,如果还想再完美一点,请继续往下: 再完美一点~ 实现给表单预设值 如果你很认真地在敲这些代码,你可能会发现,测试例子里的预设值并没有执行...实现这一的效果,在函数组件中可以使用useRef,类组件中也可以使用React.createRef。
问题 Form.Item 中设置了 name 属性,但是 Form 中的 onValuesChange 并没有生效。...2.你不能用控件的 value 或 defaultValue 等属性来设置表单域的值,默认值可以用 Form 里的 initialValues 来设置。...注意 initialValues 不能被 setState 动态更新,你需要用 setFieldsValue 来更新。...3.你不应该用 setState,可以使用 form.setFieldsValue 来动态改变表单值。...form[schema.field] : "-"; } }; 这样就可以了 原理 问题来了,antd 是怎么做到将 value 和 onChange 注入的呢?
antd的表单操作比较细致,功能较多,我们工作中常用的无非增加内容的表单和编辑的表单,增加内容的表单初始化时,大部分默认值为null的装填,偶尔有一些需要设置初始值,如性别或者一些必选属性。...antd中提供了第二种模式,我们可以使用initvalue设置初始值,此时表单初始化时会根据这个值来初始化表单,所有初始化的操作都是根据这个值。...还有就是表单提交时,是使用表单上form的事件,还是从form中提取值后在提交,也是有选择的,前者可以用绑定form的form获取表单数据,后者可以绑定form的事件,前者的话数据验证再提交函数中,后者的话可以根据...antd的框架特性在formitem上设置rules来做校检,并且显示提示信息。...,这样做到功能隔离,谁的事情谁来做,而不是在父组件中定义好了再传递到子组件,这样增加了组件的耦合性。
针对使用 Antd 的系统,在 ahooks 中主要是通过 useAntdTable 和 usePagination 这两个 hook 来封装。...并根据请求的参数以及返回的 total 值,得出总的页数。...form) { return; } // antd v4 if (isAntdV4) { return form.setFieldsValue(allFormDataRef.current...初始化的表单数据可以填写 simple 和 advance 全量的表单数据,开发者可以根据当前激活的类型来设置表单数据。修改 type 的时候会重置 form 表单数据。...const changeType = () => { // 获取当前表单值 const activeFieldsValue = getActivetFieldValues(); // 修改表单值
”value“,当我点击“更新value按钮”时,Input中的值不更新。...Input组件没有设置value属性的话,就是一个非受控组件,它需要设置defaultValue,如果用户不手动改变Input的输入,那么Input就一直显示defaultValue指向的值(友情提示:...用户手动更新表单数据,比如在组件中手动输入,在组件中手动选择等等,在用户手动更新数据之后,initialValue的值改变不会更新表单值。 2....当执行了setFieldsValue方法之后,initialValue的值改变不会更新表单值。...下面的例子中在生命周期函数componentDidMount中执行了setFieldsValue方法,其他不变,你会发现不管怎么点击“重新获取数据按钮”,城市对应的值都不会被更新,而总量对应的值却一直在更新
这样在 Store 里就存储了所有表单项的值,在 submit 时就可以取出来传入 onFinish 回调。...从 context 中读取对应 name 的 values 的值,同步设置 value: 然后 React.cloneElement 复制 chilren,额外传入 value、onChange 等参数...核心就是一个 Store 来保存表单的值,然后用 Item 组件包裹具体表单,设置 value 和 onChange 来同步表单的值。...setFieldsValue({ username: '东东东' }) }}>设置表单值 <Form ref...其实原理不复杂,就是把 Form 的表单项的值存储到 Store 中。 在 Form 组件里把 Store 放到 Context,在 Item 组件里取出来。
今天在工作中遇到一个问题,我司使用的是antd 组件,在使用react数据请求时,并在其中设置setState,页面发现了异常....selectOnChange方法时,下面的调出人员也会随之发生变化, 问题来了:当我选择调出人员的一个下拉时: 如图 然后再去调用调出项目的selectOnChange事件,调出人员的位置变成了罗慧的value值,...如图: 这什么原因,我们这边的前端说法是:两个异步的调用,一个异步请求,一个setState,当异步请求的时候,setState也是异步更改数据,当数据请求成功时,便遗留了上一个的value值,这样的解释很牵强...我能提供的解决方案: 当调出项目selectOnChange的时候,调用一个同步的方法,把调出人员的select设为空.在antd中可以直接使用this.props.form.setFieldsValue
你可以在页面中点击切换主题功能查看暗色主题效果: 64.gif 无边框组件 在业务中,我们发现有些场景会存在轻量级的选择组件。...更小的尺寸 在 antd@3.9.0 中,我们引入了 svg 图标(为何使用 svg 图标?[3])。...在 4.0 中,我们调整了图标的使用 API 从而支持 tree shaking,减少 antd 默认包体积约 150 KB(Gzipped)。...旧版 Icon 使用方式将被废弃: import { Icon, Button } from 'antd'; const Demo = () => ( <Icon type="...<em>在</em> v4 版本<em>中</em>,Form 将自带表单实例,你可以直接通过 Form.Item 的 name 属性进行数据绑定,从而简化你的代码: - const { form } = this.props; - const
使用CSS-in-JS,您可以将不同模块的样式定义在同一个文件或同一个组件内,并以动态方式根据组件状态或其他条件应用它们。...( 一些元素(如)具有自己的默认宽度 ), 像下面这样: 当元素设置偏移后(left值或right值不为0),则会导致盒子溢出父盒子,致使整个页面出现滚动条: 此时可以用calc()计算确定盒子的宽度...一些元素(如)具有自己的默认宽度), 像下面这样: 当元素设置偏移后(left值或right值不为0),则会导致盒子溢出父盒子,致使整个页面出现滚动条: 此时可以用calc()计算确定盒子的宽度...在Windows操作系统中,可以通过“系统变量”和“用户变量”来设置环境变量。在Linux或Unix系统中,可以使用“export”命令来设置环境变量。...安装依赖: pnpm install cross-env 此时便可以在package.json中设置我们的环境变量: 此时控制台打印环境变量的值,便可以看到环境变量被注入了: 20、使用vite-plugin-html
bug收集:专门解决与收集bug的网站 网址:www.bugshouji.com 今日分享:React hooks + antd UI 实现增删改案例 1....删除数据 设置columns时,给删除按钮,添加事件,将传递当前行的id { title: '操作', key: 'action', render: (_, record) => ( <Space size...表单中,具体的项使用 Form.Item: <Form.Item label="姓名" name="name" rules={[{ required: true, message: '请输入姓名!'...name值, 是表单提交时,传入对象相对应的键名,为当前表单项输入的值。...form.setFieldsValue 显示对应的值 useEffect(()=>{ getAdminInfoById(id).then(data=>{ if(data.code
(前言)Form的适用场合 a.校验和提交 b.数据收集/存数据 在没有分步提交的情况下,使用Form是保存页面现有数据最简单最直接的方法 举例: ?...values); }) 看到图片右边Form已经帮我们把值已键值对的形式保存起来了,key是你在使用Form时通过getFieldDecorator 方法与表单进行双向绑定时的参数id,详见ant文档中的...另一种是给数组中的每一项都增加一个flow_flag作为这一项的唯一id,例如:在点击add时,向数组中push一条初始数据时同时将flow_flag push进去, 这种方法“1对1”“1对n”删都可以...如何实现一个受控选择的树和遇到的问题及解决方法 项目需要一个这样的树: 每一个树节点都代表的是一个职级,所以子节点全选中不代表父节点选中,父节点选中代表子节点全选中,这个时候Antd中的树组件就不满足我们项目的需求了...(写时遇到的坑)写这样受控的树时不要用Form了,因为勾选时想给自己setFiledValue是不支持的,上网查是因为 “antd中form表单的setFieldsValue只能设置其他域的值,不能控制自己表单域的值
== undefined 先判断下是否有值 ts可以直接用?表示有值的情况再执行 render: (value) => { return ({value?..../编辑 const showEdit = (record: any) => { setIsAdd(false) addForm.resetFields() addForm.setFieldsValue...showSizeChanger={true} /> ) }; export default Role; # 树形控件Tree 效果如下: onCheck是勾选前面的选择框 onSelect是点击后面的汉字,如系统管理...注意: 嵌套在表单里面时,addForm.getFieldsValue(),提交请求时不会抓取tree的值 提交数据方法,在onCheck方法里面对表单赋值 新建及编辑时先清空上一次选中的keys...中存在 其它文件可以直接使用,eg: API.IUser declare namespace API { interface IUser { id: number,
前言: 在之前的一篇文章已经介绍过了,公司正在使用NG-ZORRO组件库开发后台应用,并且详细的介绍了Angular开发环境的搭建和项目的创建。...这篇文章就是为了让大家熟悉了解我们该如何在Angular项目中使用到NG-ZORRO UI组件库搭建后台管理框架。...启用图标动态加载):y set up custom theme file(设置自定义主题文件):y choose your locale code(选择区域设置代码):ZH-CN choose template...引入样式: 在 angular.json 中引入: { "styles": [ "node_modules/ng-zorro-antd/ng-zorro-antd.min.css" ]...} 在 style.css 中引入css样式文件: @import "~ng-zorro-antd/ng-zorro-antd.min.css"; 在 style.less 中引入 less 样式文件:
领取专属 10元无门槛券
手把手带您无忧上云