- vừa được xem lúc

ReactJS: useState, useEffect trong Reactjs là cái chi rứa?

0 0 141

Người đăng: Ngoc Long Chu

Theo Viblo Asia

Mở đầu

Nhắc đến React là nhắc đến 1 thư viện JavaScript tuyệt vời và ta sử dụng nó để xây dựng giao diện người dùng (UI). Nó cho tốc độ phản hồi tuyệt vời khi user nhập liệu lên trang web. Vì mọi người rất thích học tập và tìm hiểu về công cụ này. Tuy nhiên việc học và sử dụng Reactjs đôi khi sẽ hơi khó khăn với các bạn mới, khiến các bạn chơi vơi không biết về những khái niệm ví dụ như Hooks, useState, useEffect,...

Hooks

Giới thiệu một chút về Hooks. Đó là Hooks cung cấp một cách làm mới, mạnh mẽ, trực quan hơn class component để tái sử dụng các chức năng giữa các component, khiến các component dễ hiểu hơn. Vì rất nhiều ưu điểm nổi trôi nên các nhà phát triển cũng yêu cầu nên sử dụng hooks trong các dự án.

1. Cập nhật state trong React mà không dùng setState?

Trước hết hãy đến với ví dụ sau. Với cách sử dụng class component để thay đổi 1 đoạn text trong button ta cần làm như sau:


import React, { useState } from "react"; export default class Button extends Component { constructor() { super(); this.state = { buttonText: "Click me, please" }; this.handleClick = this.handleClick.bind(this); } handleClick() { this.setState(() => { return { buttonText: "Thanks, been clicked!" }; }); } render() { const { buttonText } = this.state; return <button onClick={this.handleClick}>{buttonText}</button>; }
}

Và trong trường hợp nếu ta sử dụng Hook thì sao?

import React, { useState } from "react"; export default function Button() { const [buttonText, setButtonText] = useState("Click me, please"); return ( <button onClick={() => setButtonText("Thanks, been clicked!")}> {buttonText} </button> );
}

Wow, amazing! Đoạn code xử lý đã trở nên ngắn hơn. Đồng thời việc khởi tạo hay thay đổi giá trị buttonText trở nên dễ dàng hơn rất nhiều.

Đoạn code const [buttonText, setButtonText] = useState("Click me, please"); chính là cách ta sử dụng useState. Nó trả về một cặp giá trị dưới dạng mảng: state hiện tại (buttonText) và một hàm để update nó (setButtonText). Tham số "Click me, please" được truyền vào sẽ là giá trị mặc định của state hiện tại

2. Tìm nạp dữ liệu bằng useEffect

Bạn đã đọc về vòng đời của component trong React chưa? Chắc là đọc rồi và bạn để ý thấy có 3 method phổ biến mã component sẽ chạy qua đó là componentDidMount, componentDidUpdate và componentWillUnmount. 3 method rất tách biệt và dễ sử dụng tuy nhiên nó khiên component trở nên phức tạp hơn và việc quản lý chúng không hề dễ dàng chút nào.

Và useEffect được ban cho sinh mệnh với nhiệm vụ phục vụ cùng một mục đích với componentDidMount, componentDidUpdate và componentWillUnmount trong các lớp React, nhưng được hợp nhất thành một API duy nhất.

Ví dụ ta muốn fetch dữ liệu lần đầu render thay vì sử dụng componentDidMount:

 componentWillUnmount() { fetch("http://localhost:3001/links/") .then(response => response.json()) .then(data => setData(data)); ); }

bây giờ ta có kiểu viết dùng useEffect tương đương:

 useEffect(() => { fetch("http://localhost:3001/links/") .then(response => response.json()) .then(data => setData(data)); }, []);

và nếu như ta muốn nó chạy mỗi lần component được render thì rất đơn giản

 useEffect(() => { fetch("http://localhost:3001/links/") .then(response => response.json()) .then(data => setData(data)); }, [abcState, xyzState]);

ta sẽ truyền thêm các giá trị vào mảng phụ và hiểu rằng, mỗi khi một giá trị nào đó trong mảng phụ thay đổi thì useEffect sẽ được chạy lại.

Và với componentWillUnmount ta sẽ chỉ cần thêm return cleanup() vào useEffect

 useEffect(() => { fetch("http://localhost:3001/links/") .then(response => response.json()) .then(data => setData(data)); return function cleanup() { //code ... } }, []);

Kết

Trên đây là 1 vài tìm hiểu của mình về useState và useEffect. Mong mọi người sẽ đóng góp ý kiến về bài viết của mình ở dưới phần bình luận. Like và subcribe để nhận thêm nhiều bài viết mới nhé! Thươngs!!!

Nguồn: https://www.valentinog.com/blog/hooks/

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cùng tìm hiểu về các hook trong React hooks

Đối với ai đã từng làm việc với React thì chắc hẳn đã có những lúc cảm thấy bối rối không biết nên dùng stateless (functional) component hay là stateful component. Nếu có dùng stateful component thì cũng sẽ phải loay hoay với đống LifeCycle 1 cách khổ sở Rất may là những nhà phát triển React đã kịp

0 0 83

- vừa được xem lúc

Khi nào nên (và không nên) sử dụng Redux

. Công việc quản lý state với những hệ thống lớn và phức tạp là một điều khá khó khăn cho đến khi Redux xuất hiện. Lấy cảm hứng từ design pattern Flux, Redux được thiết kế để quản lý state trong các project JavaScript.

0 0 109

- vừa được xem lúc

ReactJS: Props và State

Nếu bạn đã học ReactJS hay React Native, bạn sẽ thấy các Props và State được sử dụng rất nhiều. Vậy chính xác chúng là gì? Làm thế nào để chúng ta sử dụng chúng đúng mục đích đây.

0 0 45

- vừa được xem lúc

State và Props trong Reactjs

Hello các bạn, tiếp tục seri tìm hiểu về ReactJs hôm nay mình xin giới thiệu đến các bạn hai thứ mình cho là thú vị nhất của ReactJs là State và Props. State bạn có thể hiểu đơn giản là một nơi mà bạn lưu trữ dữ liệu của Component, từ đó bạn có thể luân chuyển dữ liệu đến các thành phần trong Compon

0 0 39

- vừa được xem lúc

Memoization trong React

. 1.Introduction. Memoization có liên quan mật thiết đến bộ nhớ đệm, và dưới đây là một ví dụ đơn giản:. const cache = {}.

0 0 40

- vừa được xem lúc

Nâng cao hiệu suất React Hooks với React.memo, Memoization và Callback Functions

1.Ngăn Re-render và React.memo. React.

0 0 69