当前位置:首页 > 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 中,组件的销毁通常由 React 的生命周期管理。当组件从 DOM 中移除时,React 会自动触发销毁相关的生命周期方法。以下是关键点: 组件的销毁通常…

如何开发react

如何开发react

开发React应用的基本步骤 安装Node.js和npm 确保系统中已安装Node.js(包含npm)。可通过官网下载安装包,安装后验证版本: node -v npm -v 创建React项目…

如何配置react

如何配置react

配置React项目的步骤 安装Node.js和npm 确保系统已安装Node.js(包含npm)。可通过官网下载并安装最新版本。安装完成后,运行以下命令验证版本: node -v npm -v 创建…

react 如何启动

react 如何启动

创建 React 项目 使用官方工具 create-react-app 快速初始化项目,需提前安装 Node.js(版本 ≥ 14.0.0)和 npm/yarn: npx create-react-…

如何提高react

如何提高react

优化性能 使用React.memo对组件进行记忆化处理,避免不必要的重新渲染。对于类组件,可以使用PureComponent来达到类似效果。 利用useMemo缓存计算结果,避免重复计算。对于函数或…

react如何循环

react如何循环

循环渲染列表 在React中循环渲染列表通常使用map方法,这是最常用的方式。通过map可以将数组中的每个元素转换为React元素并渲染到页面上。 const items = ['Apple', '…