当前位置:首页 > 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 简化表单逻辑。

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中monent如何获取日期

react中monent如何获取日期

使用 Moment.js 获取日期 在 React 项目中,可以通过 Moment.js 库轻松处理日期和时间。以下是几种常见的日期获取方法。 安装 Moment.js 确保项目中已安装 Mome…

react native如何启动

react native如何启动

如何启动 React Native 项目 安装 Node.js 和 npm 确保已安装 Node.js(建议版本 16 或更高)和 npm(Node.js 自带)。可通过以下命令检查版本: node…

vue 实现表单

vue 实现表单

Vue 表单实现方法 使用 Vue 实现表单可以通过多种方式,包括基础表单绑定、表单验证以及第三方库集成。以下是常见的实现方法: 基础表单绑定 Vue 提供了 v-model 指令实现表单元素的双…

如何选购react

如何选购react

选购 React 相关产品或服务的建议 React 是一个用于构建用户界面的 JavaScript 库,广泛应用于前端开发。以下是选购 React 相关产品(如课程、书籍、工具、组件库等)的参考方法:…

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…

react如何diff

react如何diff

React Diff 算法原理 React 的 Diff 算法是 Virtual DOM 的核心部分,用于高效更新真实 DOM。其核心思想是通过对比新旧 Virtual DOM 树的差异,最小化 DO…