Rate this post

React là một trong những thư viện JavaScript phổ biến nhất để xây dựng giao diện người dùng. Với khả năng tạo ra các ứng dụng web tương tác và mạnh mẽ, React đã trở thành lựa chọn hàng đầu của nhiều lập trình viên. Trong các ứng dụng web, forms là một thành phần quan trọng, cho phép người dùng nhập và gửi dữ liệu. Hiểu cách tạo và quản lý forms trong React là một kỹ năng cơ bản mà mọi lập trình viên nên có.

Trong bài viết này, chúng ta sẽ khám phá cách tạo forms trong React, quản lý trạng thái của chúng, và sử dụng các hooks để làm việc với forms một cách hiệu quả. Bài viết cũng sẽ giới thiệu các phương pháp tốt nhất để xử lý validation và gửi dữ liệu forms đến server. Cuối cùng, chúng ta sẽ xem xét một số thực hành tốt nhất để đảm bảo mã nguồn của bạn sạch sẽ và dễ bảo trì.

Tạo Forms Đơn Giản trong React

Forms là một thành phần quan trọng trong bất kỳ ứng dụng web nào. Chúng ta sẽ bắt đầu bằng cách tạo một form đơn giản với React.

Cấu trúc cơ bản của một form trong React:

Form trong React được tạo bằng cách sử dụng các phần tử HTML cơ bản như input, textarea, và select.

Ví dụ về form đơn giản:

import React, { useState } from 'react';

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

  const handleChange = (event) => {
    setName(event.target.value);
  };

  const handleSubmit = (event) => {
    event.preventDefault();
    alert(`A name was submitted: ${name}`);
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        Name:
        <input type="text" value={name} onChange={handleChange} />
      </label>
      <input type="submit" value="Submit" />
    </form>
  );
}

export default SimpleForm;

Quản lý Trạng thái Forms với Class Components

Trong React, bạn có thể sử dụng class components để quản lý trạng thái của forms. Class components sử dụng state để lưu trữ và quản lý dữ liệu nhập từ người dùng.

Ví dụ cụ thể:

import React, { Component } from 'react';

class ClassForm extends Component {
  constructor(props) {
    super(props);
    this.state = { name: '' };

    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  }

  handleChange(event) {
    this.setState({ name: event.target.value });
  }

  handleSubmit(event) {
    event.preventDefault();
    alert(`A name was submitted: ${this.state.name}`);
  }

  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          Name:
          <input type="text" value={this.state.name} onChange={this.handleChange} />
        </label>
        <input type="submit" value="Submit" />
      </form>
    );
  }
}

export default ClassForm;

Quản lý Trạng thái Forms với Function Components và Hooks

Với sự ra đời của hooks, việc quản lý trạng thái trong function components trở nên dễ dàng hơn. Hooks như useState cho phép bạn thêm trạng thái vào function components.

Ví dụ cụ thể:

import React, { useState } from 'react';

function HookForm() {
  const [name, setName] = useState('');

  const handleChange = (event) => {
    setName(event.target.value);
  };

  const handleSubmit = (event) => {
    event.preventDefault();
    alert(`A name was submitted: ${name}`);
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        Name:
        <input type="text" value={name} onChange={handleChange} />
      </label>
      <input type="submit" value="Submit" />
    </form>
  );
}

export default HookForm;

Xử lý Validation trong Forms

Validation là một phần quan trọng của forms để đảm bảo dữ liệu nhập vào là hợp lệ.

Cách đơn giản để thêm validation vào forms:

import React, { useState } from 'react';

function ValidatedForm() {
  const [name, setName] = useState('');
  const [error, setError] = useState('');

  const handleChange = (event) => {
    setName(event.target.value);
  };

  const handleSubmit = (event) => {
    event.preventDefault();
    if (name.trim() === '') {
      setError('Name is required');
    } else {
      setError('');
      alert(`A name was submitted: ${name}`);
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        Name:
        <input type="text" value={name} onChange={handleChange} />
      </label>
      {error && <div style={{ color: 'red' }}>{error}</div>}
      <input type="submit" value="Submit" />
    </form>
  );
}

export default ValidatedForm;

Sử dụng Formik và Yup để xử lý validation:

npm install formik yup
import React from 'react';
import { useFormik } from 'formik';
import * as Yup from 'yup';

function FormikForm() {
  const formik = useFormik({
    initialValues: {
      name: '',
    },
    validationSchema: Yup.object({
      name: Yup.string().required('Name is required'),
    }),
    onSubmit: (values) => {
      alert(`A name was submitted: ${values.name}`);
    },
  });

  return (
    <form onSubmit={formik.handleSubmit}>
      <label>
        Name:
        <input
          type="text"
          name="name"
          onChange={formik.handleChange}
          onBlur={formik.handleBlur}
          value={formik.values.name}
        />
      </label>
      {formik.touched.name && formik.errors.name ? (
        <div style={{ color: 'red' }}>{formik.errors.name}</div>
      ) : null}
      <input type="submit" value="Submit" />
    </form>
  );
}

export default FormikForm;

Gửi Dữ liệu Forms

Gửi dữ liệu forms đến server là bước quan trọng để hoàn thành quá trình nhập liệu của người dùng.

Sử dụng fetch API để gửi dữ liệu:

const handleSubmit = async (event) => {
  event.preventDefault();
  const response = await fetch('https://example.com/api/submit', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ name }),
  });
  const result = await response.json();
  console.log(result);
};

Các Thực Hành Tốt Nhất khi Làm việc với Forms trong React

Tổ chức mã nguồn rõ ràng và dễ bảo trì:

  • Sử dụng các thành phần nhỏ gọn và tái sử dụng.
  • Tách biệt logic và giao diện.

Sử dụng Controlled Components vs Uncontrolled Components:

  • Controlled Components: React hoàn toàn quản lý trạng thái của các phần tử form.
  • Uncontrolled Components: Sử dụng refs để quản lý trạng thái của các phần tử form.

Tối ưu hóa hiệu suất khi làm việc với nhiều forms phức tạp:

  • Tránh render không cần thiết bằng cách sử dụng React.memo và useCallback.

Tổng kết

Trong bài viết này, chúng ta đã khám phá các khía cạnh cơ bản của việc tạo forms trong React, từ cài đặt môi trường phát triển, tạo forms đơn giản, quản lý trạng thái forms với class components và hooks, xử lý validation, đến gửi dữ liệu forms và các thực hành tốt nhất. Hiểu rõ cách làm việc với forms sẽ giúp bạn xây dựng các ứng dụng React mạnh mẽ và thân thiện với người dùng. Tiếp tục học tập và thực hành để nâng cao kỹ năng của bạn trong lập trình React.

Tham khảo

  1. React Documentation
  2. Formik Documentation
  3. Yup Documentation
  4. MDN Web Docs on Forms
  5. Using the State Hook

    Để lại một bình luận

    Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

    Contact Me on Zalo
    Call now