当前位置:首页 > React

react如何设计表单

2026-02-12 01:05:14React

React 表单设计方法

受控组件表单
使用 React 的 state 管理表单数据,通过 onChange 事件同步输入值与状态。适用于需要实时验证或复杂交互的场景。

function ControlledForm() {
  const [formData, setFormData] = useState({ username: '', password: '' });

  const handleChange = (e) => {
    setFormData({ ...formData, [e.target.name]: e.target.value });
  };

  return (
    <form>
      <input 
        name="username" 
        value={formData.username} 
        onChange={handleChange} 
      />
      <input 
        name="password" 
        type="password" 
        value={formData.password} 
        onChange={handleChange} 
      />
    </form>
  );
}

非受控组件表单
通过 useRef 直接访问 DOM 元素获取表单值。适用于简单表单或需要集成第三方库的情况。

react如何设计表单

function UncontrolledForm() {
  const usernameRef = useRef(null);
  const passwordRef = useRef(null);

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

  return (
    <form onSubmit={handleSubmit}>
      <input ref={usernameRef} name="username" />
      <input ref={passwordRef} name="password" type="password" />
      <button type="submit">Submit</button>
    </form>
  );
}

表单验证方案
结合状态管理实现基础验证,或使用库如 Formik + Yup 处理复杂规则。

react如何设计表单

// 基础验证示例
const [errors, setErrors] = useState({});
const validate = () => {
  const newErrors = {};
  if (!formData.username) newErrors.username = 'Required';
  if (formData.password.length < 6) newErrors.password = 'Too short';
  setErrors(newErrors);
  return Object.keys(newErrors).length === 0;
};

第三方库推荐

  • Formik: 提供表单状态管理、提交处理和验证集成。
  • React Hook Form: 高性能、非受控为主的轻量级方案。
  • Yup: 与 Formik 搭配使用的 schema 验证库。
// Formik + Yup 示例
import { useFormik } from 'formik';
import * as Yup from 'yup';

const validationSchema = Yup.object({
  username: Yup.string().required('Required'),
  password: Yup.string().min(6, 'Too short').required('Required'),
});

const FormikForm = () => {
  const formik = useFormik({
    initialValues: { username: '', password: '' },
    validationSchema,
    onSubmit: values => console.log(values),
  });

  return (
    <form onSubmit={formik.handleSubmit}>
      <input 
        name="username" 
        onChange={formik.handleChange} 
        value={formik.values.username} 
      />
      {formik.errors.username && <div>{formik.errors.username}</div>}
      <button type="submit">Submit</button>
    </form>
  );
};

动态表单字段
通过状态数组管理动态增减的字段,适用于需要用户添加多个输入项的场景。

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

  const addField = () => setFields([...fields, { value: '' }]);
  const removeField = (index) => {
    const newFields = [...fields];
    newFields.splice(index, 1);
    setFields(newFields);
  };

  return (
    <form>
      {fields.map((field, i) => (
        <div key={i}>
          <input 
            value={field.value} 
            onChange={(e) => {
              const newFields = [...fields];
              newFields[i].value = e.target.value;
              setFields(newFields);
            }} 
          />
          <button type="button" onClick={() => removeField(i)}>Remove</button>
        </div>
      ))}
      <button type="button" onClick={addField}>Add Field</button>
    </form>
  );
};

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

相关文章

react如何使用

react如何使用

React 的基本使用 React 是一个用于构建用户界面的 JavaScript 库,以下是一些核心概念和使用方法。 安装 React 通过 create-react-app 快速搭建 React…

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元…

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gree…

react性能如何

react性能如何

React 性能特点 React 通过虚拟 DOM(Virtual DOM)和高效的 diff 算法优化性能。虚拟 DOM 减少了直接操作真实 DOM 的开销,仅在必要时更新变化的部分。React 的…

如何记忆react

如何记忆react

理解核心概念 React的核心概念包括组件、状态(state)、属性(props)、生命周期方法(类组件)和钩子(函数组件)。掌握这些基础概念是记忆React的关键。组件是React应用的构建块,分为…

如何下载react

如何下载react

下载 React 的方法 通过 npm 或 yarn 安装 React 可以通过包管理器 npm 或 yarn 安装。确保已安装 Node.js(包含 npm),然后在项目目录中运行以下命令:…