Trong phiên bản react 16.8 đã thêm tính năng hook (React Hooks). Cho phép chúng ta có thể dễ dàng sử dụng state và nhiều cái khác mà không cần phải khai báo class.

Sử dụng State Hook

Ví dụ với state hock để thực hiện 1 đoạn chương trình đếm số lần click vào button chúng ta viết như sau:

import React, { useState } from 'react';

function Example() {
  //Khai báo một biến trạng thái mới, đặt tên là là "count"
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

Còn đây trường hợp sử dụng class Component và state như trước đây:

class Example extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 0
    };
  }

  render() {
    return (
      <div>
        <p>You clicked {this.state.count} times</p>
        <button onClick={() => this.setState({ count: this.state.count + 1 })}>
          Click me
        </button>
      </div>
    );
  }
}

State của biến count được khởi tạo giá trị là 0. Khi click vào button thì hàm setState sẽ được gọi và tăng biến count +1.

Sử dụng Effect Hook

Effect Hook cho phép chúng ta thực hiện các thay đổi của  function component. Nó tương tự xảy ra khi function khởi tạo hoặc được thay đổi state, tương tự như componentDidMount, componentDidUpdate.

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

function Example() {
  const [count, setCount] = useState(0);

  // Similar to componentDidMount and componentDidUpdate:
  useEffect(() => {
    // Update the document title using the browser API
    document.title = `You clicked ${count} times`;
  });

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

Quy tắc khi sử dụng Hock

  • Chỉ sử dụng Hocks ở thành phần cao nhất của React function. Không sử dụng trong các vòng lặp, điều kiện hoặc các function lồng nhau.
  • Chỉ sử dụng Hocks ở thành phần của React function hoặc custom Hocks nào đó, không sử dụng Hocks trong phần javascript thường.

Sử dụng ESLint Plugin để check lỗi

npm install eslint-plugin-react-hooks --save-dev
// Your ESLint configuration
{
  "plugins": [
    // ...
    "react-hooks"
  ],
  "rules": {
    // ...
    "react-hooks/rules-of-hooks": "error", // Checks rules of Hooks
    "react-hooks/exhaustive-deps": "warn" // Checks effect dependencies
  }
}