0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Hướng Dẫn Sử Dụng Form trong React: Ví Dụ và Thực Hành

Đăng vào 7 tháng trước

• 7 phút đọc

📘 Hướng Dẫn Sử Dụng Form trong React: Ví Dụ và Thực Hành

🔹 Giới Thiệu

Forms là một phần thiết yếu của bất kỳ ứng dụng web nào. Chúng cho phép người dùng nhập dữ liệu, mà có thể được xử lý trong React bằng cách sử dụng quản lý trạng tháibộ xử lý sự kiện. Khác với HTML thông thường, các form trong React thường là các thành phần được kiểm soát, nghĩa là giá trị đầu vào được kiểm soát bởi trạng thái của React.

🔹 Cách Xử Lý Form Cơ Bản trong React

Ví Dụ: Form Nhập Cơ Bản

javascript Copy
import React, { useState } from "react";

function SimpleForm() {
  const [name, setName] = useState("");

  const handleSubmit = (e) => {
    e.preventDefault(); // Ngăn chặn việc tải lại trang
    alert(`Xin chào, ${name}!`);
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        Nhập tên của bạn:{" "}
        <input
          type="text"
          value={name}
          onChange={(e) => setName(e.target.value)}
        />
      </label>
      <button type="submit">Gửi</button>
    </form>
  );
}

export default SimpleForm;

👉 Ở đây, trường nhập liệu là một thành phần được kiểm soát vì giá trị của nó được liên kết với trạng thái name.

🔹 Quản Lý Nhiều Trường Nhập với Một Trạng Thái

Bạn có thể quản lý nhiều trường trong form bằng cách sử dụng một đối tượng trạng thái duy nhất.

Ví Dụ:

javascript Copy
import React, { useState } from "react";

function MultiForm() {
  const [formData, setFormData] = useState({
    username: "",
    email: "",
    password: "",
  });

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

  const handleSubmit = (e) => {
    e.preventDefault();
    console.log(formData);
  };

  return (
    <form onSubmit={handleSubmit}>
      <input
        type="text"
        name="username"
        placeholder="Nhập Tên Đăng Nhập"
        value={formData.username}
        onChange={handleChange}
      />
      <br />
      <input
        type="email"
        name="email"
        placeholder="Nhập Email"
        value={formData.email}
        onChange={handleChange}
      />
      <br />
      <input
        type="password"
        name="password"
        placeholder="Nhập Mật Khẩu"
        value={formData.password}
        onChange={handleChange}
      />
      <br />
      <button type="submit">Đăng Ký</button>
    </form>
  );
}

export default MultiForm;

👉 Phương pháp này dễ dàng mở rộng cho các form có nhiều trường.

🔹 Xử Lý Checkbox, Radio và Select

Các loại đầu vào khác nhau cần xử lý hơi khác nhau.

Ví Dụ:

javascript Copy
import React, { useState } from "react";

function AdvancedForm() {
  const [gender, setGender] = useState("");
  const [agree, setAgree] = useState(false);
  const [country, setCountry] = useState("");

  const handleSubmit = (e) => {
    e.preventDefault();
    console.log({ gender, agree, country });
  };

  return (
    <form onSubmit={handleSubmit}>
      {/* Nút Radio */}
      <label>
        <input
          type="radio"
          name="gender"
          value="Male"
          onChange={(e) => setGender(e.target.value)}
        />
        Nam
      </label>
      <label>
        <input
          type="radio"
          name="gender"
          value="Female"
          onChange={(e) => setGender(e.target.value)}
        />
        Nữ
      </label>

      <br />

      {/* Checkbox */}
      <label>
        <input
          type="checkbox"
          checked={agree}
          onChange={() => setAgree(!agree)}
        />
        Tôi đồng ý với các điều khoản
      </label>

      <br />

      {/* Dropdown Select */}
      <select value={country} onChange={(e) => setCountry(e.target.value)}>
        <option value="">--Chọn Quốc Gia--</option>
        <option value="Bangladesh">Bangladesh</option>
        <option value="India">India</option>
        <option value="USA">USA</option>
      </select>

      <br />

      <button type="submit">Gửi</button>
    </form>
  );
}

export default AdvancedForm;

🔹 Ví Dụ Kiểm Tra Form

Bạn có thể thêm kiểm tra cơ bản trước khi gửi.

javascript Copy
import React, { useState } from "react";

function ValidatedForm() {
  const [email, setEmail] = useState("");
  const [error, setError] = useState("");

  const handleSubmit = (e) => {
    e.preventDefault();

    if (!email.includes("@")) {
      setError("Địa chỉ email không hợp lệ");
      return;
    }

    setError("");
    alert("Form đã được gửi thành công!");
  };

  return (
    <form onSubmit={handleSubmit}>
      <input
        type="email"
        value={email}
        placeholder="Nhập Email"
        onChange={(e) => setEmail(e.target.value)}
      />
      {error && <p style={{ color: "red" }}>{error}</p>}
      <button type="submit">Gửi</button>
    </form>
  );
}

export default ValidatedForm;

🔹 Những Điểm Quan Trọng Cần Nhớ

  • Luôn sử dụng onChange để cập nhật trạng thái cho các đầu vào được kiểm soát.
  • Sử dụng e.preventDefault() để ngăn chặn việc tải lại trang khi gửi.
  • Lưu trữ nhiều trường đầu vào trong một đối tượng duy nhất khi có thể.
  • Kiểm tra có thể được thực hiện trước khi gửi.
  • Bạn có thể tích hợp với APIs bằng cách gửi dữ liệu form qua fetch hoặc axios.

🔹 Thực Hành Tốt Nhất

  • Tổ chức mã nguồn rõ ràng: Phân tách từng thành phần form thành các file riêng biệt.
  • Sử dụng thư viện quản lý trạng thái: Như Redux hoặc Context API cho các form phức tạp.
  • Kiểm tra: Thực hiện kiểm tra tự động cho các form để đảm bảo tính chính xác.

🔹 Những Cạm Bẫy Thường Gặp

  • Không sử dụng onChange: Điều này dẫn đến việc không cập nhật trạng thái đầu vào.
  • Bỏ qua kiểm tra đầu vào: Các form không kiểm tra có thể dẫn đến lỗi dữ liệu.

🔹 Mẹo Tối Ưu Hiệu Suất

  • Sử dụng debounce: Để tránh các cuộc gọi không cần thiết đến API trong khi người dùng nhập dữ liệu.
  • Xử lý bất đồng bộ: Sử dụng async/await cho các cuộc gọi API thay vì callback.

🔹 Giải Quyết Vấn Đề

Nếu bạn gặp phải lỗi trong việc xử lý dữ liệu form, hãy kiểm tra:

  • Các thuộc tính name của các trường đầu vào có chính xác không?
  • Các sự kiện có được đăng ký đúng cách không?

🔹 Câu Hỏi Thường Gặp

1. Làm thế nào để tích hợp form với API?
Sử dụng fetch hoặc axios để gửi dữ liệu form đến backend.

2. Tôi có thể sử dụng thư viện bên ngoài nào cho form không?
Có, bạn có thể sử dụng Formik hoặc React Hook Form để quản lý form dễ dàng hơn.

🔹 Kết Luận

Tài liệu này đã đề cập đến các hành động form trong React với các ví dụ từ cơ bản đến nâng cao (kiểm tra, nhiều trường, radio, checkbox, select). Bạn có muốn tôi thêm một ví dụ tích hợp API (gửi dữ liệu form đến backend với fetch/axios) không?

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào