setState()
Xếp hàng các thay đổi đối với trạng thái thành phần và nói với React rằng thành phần này và các thành phần con của nó cần được hiển thị lại với trạng thái đã cập nhật.
Phương thức setState là không đồng bộ và trên thực tế, nó không trả về một lời hứa. Vì vậy, trong trường hợp chúng ta muốn cập nhật hoặc gọi một hàm, hàm có thể được gọi là hàm callback trong hàm setState làm đối số thứ hai. Ví dụ, trong trường hợp của bạn ở trên, bạn đã gọi một hàm dưới dạng gọi lại setState.
setState(
{ name: "Michael" },
() => console.log(this.state)
);
Đoạn mã trên hoạt động tốt cho thành phần lớp, nhưng trong trường hợp thành phần chức năng, chúng ta không thể sử dụng phương thức setState và điều này chúng ta có thể sử dụng use effect hook để đạt được kết quả tương tự.
Phương pháp hiển nhiên mà bạn cần lưu ý là ypu có thể sử dụng với useEffect như sau:
const [state, setState] = useState({ name: "Michael" })
useEffect(() => {
console.log(state)
}, [state])
Nhưng điều này cũng sẽ kích hoạt trong lần hiển thị đầu tiên, vì vậy chúng ta có thể thay đổi mã như sau, nơi chúng ta có thể kiểm tra sự kiện kết xuất đầu tiên và tránh trạng thái kết xuất. Do đó, việc triển khai có thể được thực hiện theo cách sau:
Chúng ta có thể sử dụng user hook tại đây để xác định kết xuất đầu tiên.
UseRef Hook cho phép chúng ta tạo các biến có thể thay đổi trong các thành phần chức năng. Nó hữu ích để truy cập các nút DOM / phần tử React và lưu trữ các biến có thể thay đổi mà không cần kích hoạt kết xuất lại.
const [state, setState] = useState({ name: "Michael" });
const firstTimeRender = useRef(true);
useEffect(() => {
if (!firstTimeRender.current) {
console.log(state);
}
}, [state])
useEffect(() => {
firstTimeRender.current = false
}, [])