当前位置:首页 > 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 元素获取表单值。适用于简单表单或需要集成第三方库的情况。

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 处理复杂规则。

// 基础验证示例
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>
  );
};

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

react如何设计表单

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库,专注于通过组件化开发提高代码的可维护性和复用性。其核心思想包括虚拟DOM(Virtual DOM)和单向数据流,能够…

react如何刷新

react如何刷新

刷新React组件的方法 使用状态更新触发重新渲染 通过更新组件的状态可以触发重新渲染。React会在状态变化时自动重新渲染组件。 const [count, setCount] = useStat…

react如何清理

react如何清理

清理 React 项目的方法 清理未使用的依赖项 运行 npm prune 或 yarn install --production 可以移除 node_modules 中未在 package.json…

react如何分

react如何分

React 分页实现方法 在 React 中实现分页功能可以通过多种方式完成,以下是几种常见的方法: 使用状态管理分页数据 在组件内部维护当前页码和每页数据量的状态,通过计算切片数据实现分页。…

react如何实现混入

react如何实现混入

在React中实现混入(Mixin)功能可以通过以下几种方式实现,React官方已不推荐使用传统的React.createClass混入方式,但可通过高阶组件或自定义Hook替代。 高阶组件(HOC…

css 制作表单

css 制作表单

使用CSS制作表单的基本方法 创建表单时,HTML负责结构,CSS负责样式。表单元素包括输入框、按钮、下拉菜单等,通过CSS可以统一风格并提升用户体验。 HTML结构示例 <form cla…