React获取ANTD的Input组件值的两种方法

ANTD获取Input组件值的两种方法


今天试着用antd的组件取开发网页,用useRef勾子去获取Input组件的值,发现会报错,然后去输出了一下Input组件的属性,antd只是在input上封装了一层而已。

1.使用event.target.value

万金油用法event.target.value

import React from 'react';
import { Input } from 'antd';

function InputWord(){
  const change1 =(event)=>{
    word = event.target.value
    console.log(word)
  }
 //省略
 
return(
      <Input  type="text" onChange={change1} placeholder="Word" ></Input>

)

}

2.使用ref勾子

直接用ref.current.value出错是因为这不是基础的html组件,Input组件是在基础输入框input上的一个封装,要找到Input组件里面的基础input组件,才有value值。

import React {useRef} from 'react';
import { Input } from 'antd';

function InputSentence(){
  const input2 = useRef(null)
  const change2 =(event)=>{
    sentence = input2.current.input.value
    console.log(sentence)
  }
 //省略
 
return(
      <Input ref={input2} type="text" onChange={change2} placeholder="Sentence" ></Input>

)

}

因为Input组件把输入框的值也存放到,我试着用input2.current.state.value去取,但是总是取上一次的结果,这说明了在onChange调用change2 函数的时候,组件还没有开始setState,如果是写非受控组件的话也是可以这么用的,因为已经渲染完成了。

### 解决 Ant Design Input 组件不包含临界的问题 当处理 Ant Design 中 `Input` 组件遇到边界问题时,可以考虑通过自定义验证逻辑来确保输入范围内的有效性。具体实现可以通过 Form 表单中的校验规则来进行控制。 在 Ant Design 的表单组件中,提供了多种方式来自定义输入字段的验证行为。对于需要严格控制边界的场景,可以在创建表单项时指定 `rules` 属性,并利用 JavaScript 提供的强大表达能力编写正则表达式或其他条件判断语句作为验证函数[^1]。 下面是一个简单的例子展示如何设置最小最大长度限制以及数上下限: ```jsx import React from 'react'; import { Form, Input } from 'antd'; const MyForm = () => { const onFinish = (values) => { console.log('Success:', values); }; return ( <Form name="boundary_input" initialValues={{ remember: true }} onFinish={onFinish}> {/* 数字类型的 input */} <Form.Item label="Age" name="age" rules={[ ({ getFieldValue }) => ({ validator(_, value) { if (!value || (value >= 0 && value <= 120)) { return Promise.resolve(); } return Promise.reject(new Error('Please enter an age between 0 and 120.')); }, }), ]} > <Input type="number"/> </Form.Item> {/* 字符串类型的 input 需要特定字符数 */} <Form.Item label="Username" name="username" rules={[{ required: true }, { min: 3, max: 8, message: 'Length should be between 3 to 8 characters' }]} > <Input /> </Form.Item> <Form.Item> <button htmlType="submit">Submit</button> </Form.Item> </Form> ); }; export default MyForm; ``` 上述代码片段展示了两种不同类型的输入框及其对应的边界约束:一个是用于年龄的数字型输入框,另一个是用户名字符串型输入框。前者通过自定义验证器实现了对合法取区间的检查;后者则是借助内置规则属性直接指定了允许的最大和最短长度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值