react18【系列实用教程】双向绑定表单 (2024最新版)含受控组件、非受控组件、单行多行输入框 input,下拉选择 select,单选 radio,多选 checkbox,标签 label

简介: react18【系列实用教程】双向绑定表单 (2024最新版)含受控组件、非受控组件、单行多行输入框 input,下拉选择 select,单选 radio,多选 checkbox,标签 label

类似 vue 中的 v-model

受控组件

有value属性,将表单值的获取和更新都交由react中的state来管理的组件

import { useState } from "react";

export default function Father() {
  const [msg, setmsg] = useState("");
  const handleChange = (e) => {
    setmsg(e.target.value);
  };

  return (
    <div>
      <p> {msg}</p>
      <input type="text" value={msg} onChange={handleChange} />
    </div>
  );
}

非受控组件

没有value属性,通过操作DOM来获取表单数据的组件

import { useRef } from "react";

export default function Father() {
  const Ref_input = useRef(null);

  function getFileInfo() {
    console.log(Ref_input.current && Ref_input.current.files);
  }

  return (
    <div>
      <input type="file" ref={Ref_input} />
      <button onClick={getFileInfo}>获取文件信息</button>
    </div>
  );
}

单行输入框 input

<input value={msg} onChange={changeHandler} />
 
import { useState } from "react";
 
const [msg, setMsg] = useState("你好");

function changeHandler(e) {
  setMsg(() => e.target.value);
}

多行输入框 textarea

<textarea value={msg} onChange={changeHandler} />
 
import { useState } from "react";
 
const [msg, setMsg] = useState("你好");

function changeHandler(e) {
  setMsg(() => e.target.value);
}

下拉选择 select

<select value={city} onChange={changeHandler} >
  <option value="beijing">北京</option>
  <option value="shanghai">上海</option>
  <option value="wuhan">武汉</option>
</select>
import { useState } from "react";
const [city, setCity] = useState("beijing");

function changeHandler(e) {
    setCity(() => e.target.value);
}
const [city, setCity] = useState("beijing");

function changeHandler(e) {
    setCity(() => e.target.value);
}

单选 radio

<label htmlFor="radio_male">男</label>
<input id="radio_male" type="radio" name="gender" value='male' checked={gender === 'male'} onChange={changeHandler} />

<label htmlFor="radio_female">女</label>
<input id="radio_female" type="radio" name="gender" value='female' checked={gender === 'female'} onChange={changeHandler} />
import { useState } from "react";
 
const [gender, setGender] = useState('');

function changeHandler(e) {
    setGender(() => e.target.value);
}

多选 checkbox

<input id="checkbox_apple" type="checkbox" name="fruit" value='apple' checked={fruitList.includes('apple')} onChange={changeHandler} />
<label htmlFor="checkbox_apple">苹果</label>

<input id="checkbox_orange" type="checkbox" name="fruit" value='orange' checked={fruitList.includes('orange')} onChange={changeHandler} />
<label htmlFor="checkbox_orange">橘子</label>
import { useState } from "react";
 
  const [fruitList, setFruitList] = useState([]);

  function changeHandler(e) {
    let newValue = e.target.value;

    if (fruitList.includes(newValue)) {
      // 数组删除元素
      setFruitList(fruitList.filter((item) => item !== newValue));
    } else {
      // 数组新增元素
      setFruitList([...fruitList, newValue]);
    }
  }

标签 label

用 htmlFor 代替 for 来绑定其他表单元素

<label htmlFor="msgInput">消息:</label>
<input id="msgInput" value={msg} onChange={changeHandler} />
目录
相关文章
|
9天前
|
前端开发
React添加路径别名alias、接受props默认值、并二次封装antd中Modal组件与使用
本文介绍了在React项目中如何添加路径别名alias以简化模块引入路径,设置组件props的默认值,以及如何二次封装Ant Design的Modal组件。文章还提供了具体的代码示例,包括配置Webpack的alias、设置defaultProps以及封装Modal组件的步骤和方法。
23 1
React添加路径别名alias、接受props默认值、并二次封装antd中Modal组件与使用
|
4天前
|
前端开发 JavaScript 区块链
react18函数组件+antd使用指南-使用代码集合以及报错记录汇总
本文介绍了多个React开发中常见的问题及其解决方案,包括但不限于:1)`useForm`实例未连接到任何`Form`元素的警告及解决方法;2)监听页面滚动事件的实现方式;3)React 18与antd 5.8.6中定制主题的方法;4)React结合antd 4.x版本自定义主题色的步骤;5)解决`ResizeObserver loop`相关报错的技巧;6)处理React设计表单时遇到的CDN资源加载失败问题;7)解决onClick事件传参问题;8)修复类型错误等。每部分均提供详细分析与实用代码示例,帮助开发者快速定位并解决问题。
|
9天前
|
前端开发 JavaScript
React中Fragment标签和空标签的使用
在React中,Fragment标签用于包裹多个子元素,避免添加不必要的DOM元素,空标签`<>`是Fragment的简写形式。
13 2
|
8天前
|
JavaScript 前端开发
react字符串转为dom标签,类似于Vue中的v-html
本文介绍了在React中将字符串转换为DOM标签的方法,类似于Vue中的`v-html`指令,通过使用`dangerouslySetInnerHTML`属性实现。
20 0
react字符串转为dom标签,类似于Vue中的v-html
|
7天前
封装react-antd-table组件参数以及方法如rowSelection、pageNum、pageSize、分页方法等等
文章介绍了如何封装React-Antd的Table组件,包括参数和方法,如行选择(rowSelection)、页码(pageNum)、页面大小(pageSize)、分页方法等,以简化在不同表格组件中的重复代码。
30 0
|
2月前
|
前端开发 JavaScript UED
React 基础与实践 | 青训营笔记
React 基础与实践 | 青训营笔记
44 0
|
3月前
|
前端开发 JavaScript Java
React 速通笔记
【7月更文挑战第17天】
38 1
|
前端开发
前端学习笔记202305学习笔记第二十九天-React keep alive原理之2
前端学习笔记202305学习笔记第二十九天-React keep alive原理之2
71 0
|
前端开发
前端学习笔记202306学习笔记第四十八天-react-admin marmelab之8
前端学习笔记202306学习笔记第四十八天-react-admin marmelab之7
48 0
|
5月前
|
前端开发 JavaScript
前端知识笔记(二十六)———React如何像Vue一样将css和js写在同一文件
前端知识笔记(二十六)———React如何像Vue一样将css和js写在同一文件
59 1