返回

从React Form基础表单组件的构建过程,领略UI库设计的魅力

前端

在上一篇文章中,我们探讨了组件库的基本结构、模块化、状态管理等方面。本篇将会继续深入探讨组件库的构建,带你实现Form表单组件,主要包括组件的布局、Input组件和Radio组件的实现。

组件布局

Form表单组件主要由以下几个部分组成:

  • 表单标题
  • 表单域
  • 表单按钮

表单标题通常用于表单的目的或功能。表单域是用户输入数据的区域,可以包含各种类型的输入控件,如文本框、单选按钮、复选框等。表单按钮用于提交或重置表单。

实现

import React from "react";

const Form = ({ title, children, onSubmit, onReset }) => {
  return (
    <form onSubmit={onSubmit} onReset={onReset}>
      <h2>{title}</h2>
      {children}
      <button type="submit">提交</button>
      <button type="reset">重置</button>
    </form>
  );
};

export default Form;

用法

import React from "react";
import Form from "./Form";

const MyForm = () => {
  const handleSubmit = (e) => {
    e.preventDefault();
    console.log("表单已提交");
  };

  const handleReset = (e) => {
    e.preventDefault();
    console.log("表单已重置");
  };

  return (
    <Form title="我的表单" onSubmit={handleSubmit} onReset={handleReset}>
      <input type="text" placeholder="姓名" />
      <input type="email" placeholder="邮箱" />
      <input type="password" placeholder="密码" />
    </Form>
  );
};

export default MyForm;

Input组件

Input组件用于用户输入数据,可以是文本、数字、电子邮件等。

实现

import React from "react";

const Input = ({ type, placeholder, value, onChange }) => {
  return (
    <input
      type={type}
      placeholder={placeholder}
      value={value}
      onChange={onChange}
    />
  );
};

export default Input;

用法

import React from "react";
import Input from "./Input";

const MyInput = () => {
  const [value, setValue] = React.useState("");

  const handleChange = (e) => {
    setValue(e.target.value);
  };

  return (
    <Input
      type="text"
      placeholder="姓名"
      value={value}
      onChange={handleChange}
    />
  );
};

export default MyInput;

Radio组件

Radio组件用于用户选择单一选项,通常用于性别、职业等单选题。

实现

import React from "react";

const Radio = ({ name, value, label, checked, onChange }) => {
  return (
    <label>
      <input
        type="radio"
        name={name}
        value={value}
        checked={checked}
        onChange={onChange}
      />
      {label}
    </label>
  );
};

export default Radio;

用法

import React from "react";
import Radio from "./Radio";

const MyRadio = () => {
  const [value, setValue] = React.useState("male");

  const handleChange = (e) => {
    setValue(e.target.value);
  };

  return (
    <div>
      <Radio
        name="gender"
        value="male"
        label="男"
        checked={value === "male"}
        onChange={handleChange}
      />
      <Radio
        name="gender"
        value="female"
        label="女"
        checked={value === "female"}
        onChange={handleChange}
      />
    </div>
  );
};

export default MyRadio;

结语

至此,我们已经完成了Form表单组件的基本实现,包括组件的布局、Input组件和Radio组件。在下一篇文章中,我们将继续探讨其他表单组件的实现,如Select组件、Checkbox组件等。