Khi bạn biết đến React, chắc hẳn bạn cũng đã nghe rất nhiều về state và props. Đây không phải là những thuật ngữ phức tạp. Với state và props sẽ giúp tạo ra những component có thể tái sử dụng.
Nếu bạn đang học cách tạo ra những ứng dụng đầu tiên với React, việc nắm vững state và props sẽ là chìa khóa để mở khoá tiềm năng với thư viện này. Cùng mình đi tìm hiểu nó nhé!
1. State là gì?
State trong React là một đối tượng lưu trữ dữ liệu nội bộ của một component và có thể thay đổi theo thời gian. Khi state của một component thay đổi, React sẽ tự động cập nhật lại giao diện để phản ánh những thay đổi đó.
State thường được sử dụng để quản lý các dữ liệu động trong ứng dụng, chẳng hạn như giá trị đầu vào của người dùng, dữ liệu từ API hoặc các trạng thái khác thay đổi trong quá trình sử dụng ứng dụng.
Mình sẽ lấy ví dụ đơn giản về thiết lập bộ đếm như này:
import React from 'react';
const Counter: React.FC = () => {
const [count, setCount] = React.useState<number>(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
};
export default Counter;
useState
: dùng hookuseState
với kiểu dữ liệunumber
. Biếncount
sẽ giữ giá trị của bộ đếm, vàsetCount
sẽ thay đổi giá trị này mỗi khi bạn nhấn button.- Khi giá trị của
count
thay đổi, React sẽ render lại component để hiển thị giá trị mới.
2. Props là gì?
Props (viết tắt của "Properties") là các tham số được truyền từ component cha xuống component con để hiển thị dữ liệu hoặc cấu hình component con. Props là dữ liệu bất biến, nghĩa là chúng không thể được thay đổi bởi component nhận props.
Nếu như state là trái tim của component, thì props là cách các component "giao tiếp" với nhau. Với props bạn có thể truyền dữ liệu từ component cha xuống component con, giúp tạo nên tính linh hoạt và tái sử dụng.
Ví dụ: truyền props từ component cha đến các component con.
interface GreetingProps {
name: string;
}
const Greeting: React.FC<GreetingProps> = ({ name }) => {
return <h1>Hello, {name}!</h1>;
};
const App: React.FC = () => {
return (
<div>
<Greeting name="Hello" />
<Greeting name="200Lab" />
</div>
);
};
export default App;
GreetingProps
: đây là kiểu dữ liệu mô tả các props mà componentGreeting
sẽ nhận. Trong trường hợp này,name
là chuỗistring
.- Component
App
truyền propsname
đến từng instance củaGreeting
, và mỗi instance sẽ hiển thị thông điệp Hello vớiname
khác nhau.
3. Sự khác biệt giữa State và Props
State | Props | |
---|---|---|
Định nghĩa | State là dữ liệu nội bộ của một component, có thể thay đổi trong suốt vòng đời của component. | Props là các giá trị được truyền từ component cha xuống component con, không thể thay đổi bởi component con. |
Quản lý | Quản lý bởi chính component nơi state được khai báo. | Quản lý bởi component cha và được truyền xuống |
Cập nhật giá trị | Có. State có thể thay đổi bằng cách sử dụng các hàm setState (hoặc hook useState trong function component). |
Không. Props là không thay đổi (immutable) bên trong component con. |
Khởi tạo | Được khởi tạo bên trong component, có thể mặc định từ giá trị ban đầu (ví dụ: useState(initialValue) ). |
Được truyền từ component cha dưới dạng thuộc tính khi render component con. |
Mục đích sử dụng | Dùng để quản lý dữ liệu nội bộ của component mà có thể thay đổi trong suốt quá trình sử dụng (ví dụ: giá trị form input, trạng thái bật/tắt). | Dùng để truyền dữ liệu từ component cha xuống các component con để hiển thị hoặc xử lý. |
Phạm vi sử dụng | Chỉ có thể sử dụng trong component - nơi được khai báo. | Có thể truyền từ component cha xuống nhiều component con khác nhau. |
Tính tái sử dụng | Ít tái sử dụng hơn vì mỗi component có thể có state riêng biệt. | Props giúp component dễ tái sử dụng vì chúng chỉ nhận dữ liệu từ component cha. |
Ảnh hưởng đến UI | Khi state thay đổi, UI của component cũng sẽ được render lại. | Khi props thay đổi, component con cũng sẽ được render lại để cập nhật theo dữ liệu mới. |
Cách truy cập | Truy cập và sử dụng trong function component qua useState hoặc trong class component qua this.state . |
Truy cập qua props của function component hoặc this.props trong class component. |
Tương tác giữa các component | Không thể truyền state trực tiếp từ component này sang component khác (phải thông qua props hoặc context). | Có thể truyền props từ component cha xuống nhiều component con khác nhau. |
4. Khi nào nên sử dụng State và Props
4.1 Khi nào nên sử dụng State
Sử dụng State khi bạn cần quản lý dữ liệu nội bộ của component mà có thể thay đổi trong quá trình sử dụng. Ví dụ như:
- Số lần click: khi người dùng click vào button, số lần bấm sẽ thay đổi và được hiển thị trên màn hình.
- Trạng thái bật/tắt (toggle): ví dụ như công tắc bật/tắt theme, mỗi lần người dùng click vào, trạng thái sẽ thay đổi giữa bật và tắt.
- Giá trị form input: khi người dùng nhập thông tin vào form (như tên, email, password), state sẽ lưu trữ giá trị hiện tại của các input đó và cập nhật khi người dùng thay đổi.
Trong ứng dụng TODO, bạn có thể dùngstate
để lưu danh sách list công việc mà người dùng thêm vào.
Mỗi lần người dùng thêm hoặc xóa công việc,state
sẽ được update => giao diện thay đổi để hiển thị danh sách mới.
4.2 Khi nào nên sử dụng Props
Sử dụng Props khi bạn muốn truyền dữ liệu từ component cha xuống component con, điều này sẽ giúp bạn có một component tái sử dụng với các dữ liệu khác nhau. Sử dụng props giúp bạn tạo ra các component con linh hoạt mà không cần phải thay đổi nội dung bên trong chúng.
Tình huống sử dụng:
- Component hiển thị: component nhận dữ liệu từ cha như là tên người dùng, hình ảnh, hoặc trạng thái để hiển thị trên màn hình,...
- Component tái sử dụng: component Button dùng để hiển thị nhiều loại nút khác nhau, bạn có thể sử dụng
props
để truyền các thuộc tính như màu sắc, kích thước, hoặc hành động onClick,... - Ví dụ: Bạn có một component Card để hiển thị thông tin sản phẩm. Component cha có thể truyền tên sản phẩm, giá, và hình ảnh thông qua props cho Card => mỗi Card có thể hiển thị nội dung khác nhau mà không cần thay đổi bên trong component con.
5. Kết luận
Hiểu rõ và sử dụng thành thạo state và props là chìa khóa để bạn "giải mã" sức mạnh của React. Hy vọng qua bài viết này các bạn đã nắm được khái niệm về state và props cũng như cách áp dụng chúng vào dự án của riêng bạn.
Các bài viết liên quan:
Bài viết liên quan
React Toastify là gì? Hướng dẫn sử dụng Toast Notification với React Toastify
Nov 21, 2024 • 7 min read
Hướng dẫn sử dụng Zustand trong NextJS
Nov 21, 2024 • 8 min read
Lazy Loading: Kỹ thuật Tối ưu Hiệu suất Website
Nov 17, 2024 • 14 min read
Hướng dẫn sử dụng Redux Toolkit và Redux Saga trong dự án React
Nov 15, 2024 • 10 min read
WebGL là gì? Hướng dẫn tạo đồ họa đơn giản với WebGL
Nov 13, 2024 • 7 min read
Test-Driven Development (TDD) là gì? Hướng dẫn thực hành TDD
Nov 13, 2024 • 6 min read