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} />
目录
相关文章
|
前端开发 UED 开发者
React 19 Actions:表单处理从未如此优雅
React 19 Actions:表单处理从未如此优雅
583 84
|
移动开发 前端开发 JavaScript
React 表单与事件
10月更文挑战第10天
276 1
|
前端开发 JavaScript 编译器
React编程新手入门实践教程
本书深入解析React核心思想与设计哲学,涵盖组件化思维、虚拟DOM原理及JSX本质,探讨函数组件与类组件特性,详解状态管理、生命周期控制及事件处理机制,帮助开发者掌握高效构建用户界面的技巧。
358 1
|
前端开发 JavaScript 数据安全/隐私保护
深入探索研究React表单
【10月更文挑战第6天】
288 57
|
存储 前端开发 UED
React 中的多选按钮(Checkbox)
本文详细介绍了在 React 中实现多选按钮(Checkbox)的方法,包括基础用法、常见问题及解决策略、进阶技巧如使用受控组件和第三方库,旨在帮助开发者更好地理解和应用多选按钮组件。
810 19
|
存储 前端开发 JavaScript
React 表单输入组件 Input:常见问题、易错点及解决方案
本文介绍了在 React 中使用表单输入组件 `Input` 的基础概念,包括受控组件与非受控组件的区别及其优势。通过具体代码案例,详细探讨了创建受控组件、处理多个输入字段、输入验证和格式化的方法,并指出了常见易错点及避免方法,旨在提升表单的健壮性和用户体验。
498 4
|
前端开发 JavaScript
React 表单处理技巧
【10月更文挑战第24天】本文从初学者角度出发,详细介绍了 React 中表单处理的基本概念、常见问题及解决方案。涵盖受控组件与非受控组件的区别、状态更新、表单验证、多字段管理及高级技巧,通过代码示例帮助读者更好地理解和应用。
477 7
|
前端开发 JavaScript API
2025年前端框架是该选vue还是react?有了大模型-例如通义灵码辅助编码,就不用纠结了!vue用的多选react,react用的多选vue
本文比较了Vue和React两大前端框架,从状态管理、数据流、依赖注入、组件管理等方面进行了详细对比。当前版本和下载量数据显示React更为流行,但Vue在国内用户量增长迅速。Vue 3通过组合式API提供了更灵活的状态管理和组件逻辑复用,适合中小型项目;React则更适合大型项目和复杂交互逻辑。文章还给出了选型建议,强调了多框架学习的重要性,认为技术问题已不再是选型的关键,熟悉各框架的最佳实践更为重要。
12093 1
|
10月前
|
缓存 前端开发 JavaScript
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
🌟蒋星熠Jaxonic,前端探索者。专注React Hooks深度实践,从原理到实战,分享状态管理、性能优化与自定义Hook精髓。助力开发者掌握函数组件的无限可能,共赴技术星辰大海!
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
|
缓存 前端开发 数据安全/隐私保护
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
472 68