当前位置:首页 > React

react如何设计表单

2026-02-26 10:59:22React

React 表单设计方法

受控组件方式
表单元素(如 inputtextareaselect)的值由 React 的 state 控制,通过 onChange 事件同步更新状态。

import { useState } from 'react';

function ControlledForm() {
  const [value, setValue] = useState('');

  const handleSubmit = (e) => {
    e.preventDefault();
    console.log(value);
  };

  return (
    <form onSubmit={handleSubmit}>
      <input 
        type="text" 
        value={value} 
        onChange={(e) => setValue(e.target.value)} 
      />
      <button type="submit">Submit</button>
    </form>
  );
}

非受控组件方式
通过 ref 直接访问 DOM 元素的值,适用于需要手动管理表单数据的场景。

import { useRef } from 'react';

function UncontrolledForm() {
  const inputRef = useRef(null);

  const handleSubmit = (e) => {
    e.preventDefault();
    console.log(inputRef.current.value);
  };

  return (
    <form onSubmit={handleSubmit}>
      <input type="text" ref={inputRef} />
      <button type="submit">Submit</button>
    </form>
  );
}

动态表单字段
通过 state 管理多个字段,动态增减表单元素。

function DynamicForm() {
  const [fields, setFields] = useState([{ value: '' }]);

  const addField = () => {
    setFields([...fields, { value: '' }]);
  };

  const handleChange = (index, e) => {
    const newFields = [...fields];
    newFields[index].value = e.target.value;
    setFields(newFields);
  };

  return (
    <form>
      {fields.map((field, index) => (
        <input
          key={index}
          type="text"
          value={field.value}
          onChange={(e) => handleChange(index, e)}
        />
      ))}
      <button type="button" onClick={addField}>Add Field</button>
    </form>
  );
}

表单验证
在提交或输入时验证数据,结合 state 和条件渲染提示错误信息。

function ValidatedForm() {
  const [email, setEmail] = useState('');
  const [error, setError] = useState('');

  const validateEmail = (value) => {
    const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    if (!regex.test(value)) {
      setError('Invalid email format');
    } else {
      setError('');
    }
  };

  return (
    <form>
      <input
        type="email"
        value={email}
        onChange={(e) => {
          setEmail(e.target.value);
          validateEmail(e.target.value);
        }}
      />
      {error && <p style={{ color: 'red' }}>{error}</p>}
    </form>
  );
}

第三方库集成
使用如 FormikReact Hook Form 简化表单逻辑。

react如何设计表单

import { useForm } from 'react-hook-form';

function ReactHookFormExample() {
  const { register, handleSubmit, formState: { errors } } = useForm();

  const onSubmit = (data) => console.log(data);

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <input 
        {...register('username', { required: true })} 
        placeholder="Username" 
      />
      {errors.username && <span>Username is required</span>}
      <button type="submit">Submit</button>
    </form>
  );
}

注意事项

  • 性能优化:避免在受控组件中频繁更新 state,可通过防抖(debounce)减少渲染次数。
  • 无障碍性:为表单元素添加 labelaria-* 属性。
  • 复杂表单:考虑使用状态管理工具(如 Redux)或上下文(Context)共享表单数据。

标签: 表单react
分享给朋友:

相关文章

电脑如何安装react

电脑如何安装react

安装 Node.js 和 npm React 依赖于 Node.js 和 npm(Node Package Manager)。从 Node.js 官网下载并安装最新稳定版本,安装完成后会自动包含 np…

react如何读

react如何读

React 的发音 React 的发音为 /riˈækt/(音标),读作“瑞-艾克特”。其中: “Re” 发音类似英文单词 “read” 的开头部分。 “act” 发音与英文单词 “act” 一…

react如何配置

react如何配置

配置React项目的基本步骤 安装Node.js和npm 确保系统已安装Node.js(包含npm)。可通过命令行检查版本: node -v npm -v 创建React项目 使用官方工具Creat…

react如何引入echarts

react如何引入echarts

安装 ECharts 依赖 在 React 项目中安装 ECharts 核心库和 React 封装库: npm install echarts echarts-for-react 基础引入方式 创建…

react如何切换class

react如何切换class

动态切换 React 组件的类名 在 React 中动态切换类名可以通过多种方式实现,以下是常见的几种方法: 使用模板字符串和状态管理 function MyComponent() {…

如何使用 react native

如何使用 react native

安装开发环境 确保已安装 Node.js(建议使用 LTS 版本)。通过以下命令安装 React Native 命令行工具: npm install -g expo-cli 或使用 Yarn: y…