Skip to content

Basic Form Input

การจัดการช่องกรอกข้อมูลพื้นฐานโดยใช้ useState

Controlled Components

การใช้คอมโพเนนต์ที่ควบคุมได้เพื่อจัดการสถานะของฟอร์ม

Form Validation

การตรวจสอบความถูกต้องของฟอร์มก่อนการส่ง

jsx
import React, { useState } from 'react';

export default function ValidatedForm() {
  const [formData, setFormData] = useState({ name: '', email: '' });
  const [errors, setErrors] = useState({ name: '', email: '' });

  const validateForm = () => {
    let valid = true;
    const errors = { name: '', email: '' };

    if (!formData.name) {
      errors.name = 'Name is required';
      valid = false;
    }

    if (!formData.email) {
      errors.email = 'Email is required';
      valid = false;
    } else if (!/\S+@\S+\.\S+/.test(formData.email)) {
      errors.email = 'Email address is invalid';
      valid = false;
    }

    setErrors(errors);
    return valid;
  };

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

  const handleSubmit = (event) => {
    event.preventDefault();
    if (validateForm()) {
      alert('Form submitted successfully!');
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        Name:
        <input type="text" name="name" value={formData.name} onChange={handleChange} />
        {errors.name && <span>{errors.name}</span>}
      </label>
      <br />
      <label>
        Email:
        <input type="email" name="email" value={formData.email} onChange={handleChange} />
        {errors.email && <span>{errors.email}</span>}
      </label>
      <br />
      <button type="submit">Submit</button>
    </form>
  );
}

Form with File Input

การจัดการฟอร์มที่มีช่องกรอกไฟล์

jsx
import React, { useState } from 'react';

export default function FileInputForm() {
  const [file, setFile] = useState(null);

  const handleFileChange = (event) => {
    setFile(event.target.files[0]);
  };

  const handleSubmit = (event) => {
    event.preventDefault();
    if (file) {
      alert('File selected: ' + file.name);
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        Upload file:
        <input type="file" onChange={handleFileChange} />
      </label>
      <br />
      <button type="submit">Submit</button>
    </form>
  );
}

Form with Controlled and Uncontrolled Inputs

การจัดการฟอร์มที่มีช่องกรอกข้อมูลควบคุมและไม่ควบคุม

jsx
import React, { useState, useRef } from 'react';

export default function MixedForm() {
  const [controlledValue, setControlledValue] = useState('');
  const uncontrolledRef = useRef(null);

  const handleControlledChange = (event) => {
    setControlledValue(event.target.value);
  };

  const handleSubmit = (event) => {
    event.preventDefault();
    alert(`Controlled value: ${controlledValue}\nUncontrolled value: ${uncontrolledRef.current.value}`);
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        Controlled input:
        <input type="text" value={controlledValue} onChange={handleControlledChange} />
      </label>
      <br />
      <label>
        Uncontrolled input:
        <input type="text" ref={uncontrolledRef} />
      </label>
      <br />
      <button type="submit">Submit</button>
    </form>
  );
}

Released under the MIT License