antd中getFieldDecorator的应用

本文详细介绍了AntD中Form组件的使用方法,重点讲解了从getFieldProps到getFieldDecorator的迁移过程,包括其语法变化和参数解析,以及如何利用getFieldDecorator进行数据交互反馈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

antd的Form中弃用了getFieldProps,改为了getFieldDecorator,现在记录一下相关的用法。
getFieldDecorator用于数据的交互反馈

之前对于getFieldProps,首先定义是const {getFieldProps} = this.props.form;
现在对于getFieldDecorator,没有变化const {getFieldProps} = this.props.form;
对于表单元素FormItem中的调用变化较大:
之前:

<FormItem label="密码">
	<Input type="password" placeholder="请输入您的密码" {...getFieldProps('r_password')}/>
</FormItem>

    

现在:

<FormItem label="确认密码">
  {getFieldDecorator('r_confirmPassword')(<Input type="password" placeholder="请再次输入您的密码" />)}
</FormItem>

    

this.props.form.getFieldDecorator(id, options)

经过 getFieldDecorator 包装的控件,表单控件会自动添加 value(或 valuePropName 指定的其他属性) onChange(或 trigger 指定的其他属性),数据同步将被 Form 接管,这会导致以下结果:

  1. 你不再需要也不应该用 onChange 来做同步,但还是可以继续监听 onChange 等事件。
  2. 你不能用控件的 value defaultValue 等属性来设置表单域的值,默认值可以用 getFieldDecorator 里的 initialValue。你不能用控件的 value defaultValue 等属性来设置表单域的值,默认值可以用 getFieldDecorator 里的 initialValue.
  3. 你不应该用 setState,可以使用 this.props.form.setFieldsValue 来动态改变表单值。你不应该用 setState,可以使用 this.props.form.setFieldsValue 来动态改变表单值。
getFieldDecorator(id, options) 参数

id是必填参数,表示输入控件唯一标志 string

参数说明类型默认值
id必填,输入控件唯一标志string
options选填,表以对象字面量的形式表示相应的选项

对于options ,有以下属性:

属性说明类型默认值
getValueFromEvent指定如何从事件中获取值,可以把 onChange 的参数(如 event)转化为控件的值function(…args)
initialValue子节点的初始值,类型、可选值均由子节点决定(注意:由于内部校验时使用 === 判断是否变化,建议使用变量缓存所需设置的值而非直接使用字面量))
normalize转换默认的 value 给控件function(value, prevValue, allValues): any
rules校验规则,见下方表格object[]
trigger收集子节点的值的时机string‘onChange’
validateFirst当某一规则校验不通过时,是否停止剩下的规则的校验boolean
validateTrigger校验子节点值的时机stringstring[]
valuePropName子节点的值的属性,如 Switch 的是 ‘checked’string‘value’

上文说的校验规则:

参数说明类型默认值
enum枚举类型string-
len字段长度number-
max最大长度number-
message校验文案stringReactNode
min最小长度number-
pattern正则表达式校验RegExp-
required是否必选booleanfalse
transform校验前转换字段值function(value) => transformedValue:any-
type内建校验类型,可选项string‘string’
validator自定义校验(注意,callback 必须被调用)function(rule, value, callback)-
whitespace必选时,空格是否会被视为错误booleanfalse

样例分析

{getFieldDecorator('upload', {
  valuePropName: 'fileList',
  getValueFromEvent: this.normFile,
  })(
    <Upload name="logo" action="/upload.do" listType="picture">
      <Button><Icon type="upload" /> Click to upload</Button>
    </Upload>
)}

 
  • 'upload’表示该控件的标志,自己定义就成。
  • valuePropName:表示子节点的属性。说白了就是<input type="file">元素都有一个files属性(property),用来存储用户所选择的文件,fileList就表示可以通过这个对象访问到用户所选择的文件。
  • getValueFromEvent:表示通过this.normFile来获取这个事件的值
{getFieldDecorator('select-multiple', {
  rules: [
    { required: true, 
      message: 'Please select your favourite colors!', 
      type: 'array' 
      },
    ],
  })(
    <Select mode="multiple" placeholder="Please select favourite colors">
      <Option value="red">Red</Option>
      <Option value="green">Green</Option>
      <Option value="blue">Blue</Option>
    </Select>
)}

 
  • "select-multiple"表示该控件的标志
  • "rules"校验规则。此处的校验规则有required、message和type
    • required:表示是否必选,用在此处表示下面的表单是否必填。
    • message:表示校验文案 ,即当不满足时会弹出的提示文字。用在此处表示当不满足required的要求时,即此处表单没有填的时候,会弹出提示文字:Please select your favourite colors!
    • type:内建校验类型。此处是array,表示应当是一个数组类型
getFieldDecorator(id, options) 之后是什么

可以看到getFieldDecorator(id, options) 之后还有一个(),此处()里面的内容表示要应用getFieldDecorator的元素。
之前的getFieldProps是如下写法:

<FormItem label="密码">
	<Input type="password" placeholder="请输入您的密码" {...getFieldProps('r_password')}/>
</FormItem>

 

即将其作为<Input>的一个属性。
而现在的getFieldDecorator可以说是作为了一个函数使用:

<FormItem label="确认密码">
  {getFieldDecorator('r_confirmPassword')(<Input type="password" placeholder="请再次输入您的密码" />)}
</FormItem>

 

后面的(<Input type="password" placeholder="请再次输入您的密码" />)就表示要将getFieldDecorator应用的元素位置。

      </div>
      <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-258a4616f7.css" rel="stylesheet">
              </div>
### 使用 AutoGPTQ 库量化 Transformer 模型 为了使用 `AutoGPTQ` 对 Transformer 模型进行量化,可以遵循如下方法: 安装所需的依赖包是必要的操作。通过 pip 安装 `auto-gptq` 可以获取最新版本的库。 ```bash pip install auto-gptq ``` 加载预训练模型并应用 GPTQ (General-Purpose Tensor Quantization) 技术来减少模型大小和加速推理过程是一个常见的流程。下面展示了如何利用 `AutoGPTQForCausalLM` 类来进行这一工作[^1]。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer from auto_gptq import AutoGPTQForCausalLM model_name_or_path = "facebook/opt-350m" quantized_model_dir = "./quantized_model" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) model = AutoModelForCausalLM.from_pretrained(model_name_or_path) # 加载已经量化的模型或者创建一个新的量化器对象用于量化未压缩过的模型 gptq_model = AutoGPTQForCausalLM.from_pretrained(quantized_model_dir, model=model, tokenizer=tokenizer) ``` 对于那些希望进一步优化其部署环境中的模型性能的人来说,`AutoGPTQ` 提供了多种配置选项来自定义量化参数,比如位宽(bit-width),这有助于平衡精度损失与运行效率之间的关系。 #### 注意事项 当处理特定硬件平台上的部署时,建议查阅官方文档以获得最佳实践指导和支持信息。此外,在实际应用场景之前应该充分测试经过量化的模型以确保满足预期的质量标准。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值