ReactJS - Map: Hướng dẫn cơ bản về việc chuyển đổi mảng
Xin chào các bạnfuture nhà phát triển React! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của ReactJS, cụ thể là tập trung vào hàm mạnh mẽ map
. Là giáo viên khoa học máy tính gần gũi của bạn, tôi ở đây để hướng dẫn bạn qua khái niệm này với những giải thích rõ ràng, nhiều ví dụ, và có lẽ cả một nụ cười hay hai trên đường đi. Vậy, hãy lấy饮料 yêu thích của bạn, ngồi thoải mái, và cùng nhau khám phá nào!
Map là gì trong ReactJS?
Trước khi chúng ta nhảy vào cách sử dụng map
cụ thể trong React, hãy bắt đầu từ những điều cơ bản. Trong JavaScript (nền tảng của React), map
là một phương thức của mảng cho phép chúng ta chuyển đổi mỗi phần tử của mảng theo một hàm cho trước. Nó giống như một枝 c魔法 có thể biến mỗi mục trong danh sách của bạn thành thứ gì đó mới!
Cú pháp
Dưới đây là cú pháp tổng quát của hàm map
:
array.map((currentValue, index, array) => {
// Trả về phần tử đã chuyển đổi
});
Đừng lo lắng nếu điều này có vẻ有点吓人 ban đầu. Chúng ta sẽ phân tích nó từng bước, và sớm bạn sẽ thành thạo việc sử dụng map
!
Tại sao sử dụng Map trong React?
Trong React, chúng ta thường cần hiển thị danh sách các phần tử, chẳng hạn như danh sách các mục công việc, thư viện hình ảnh, hoặc bảng dữ liệu. Đây là nơi map
tỏa sáng! Nó cho phép chúng ta hiệu quả chuyển đổi một mảng dữ liệu thành một mảng các phần tử JSX mà React có thể render.
Lần đầu tiên sử dụng Map trong React
Hãy bắt đầu với một ví dụ đơn giản. Hãy tưởng tượng chúng ta có một mảng các tên trái cây, và chúng ta muốn hiển thị chúng dưới dạng danh sách trong thành phần React của chúng ta.
import React from 'react';
function FruitList() {
const fruits = ['Apple', 'Banana', 'Cherry', 'Date'];
return (
<div>
<h2>Danh sách trái cây của tôi</h2>
<ul>
{fruits.map((fruit) => (
<li>{fruit}</li>
))}
</ul>
</div>
);
}
export default FruitList;
Hãy phân tích điều này:
- Chúng ta có một mảng các tên trái cây lưu trữ trong biến
fruits
. - Trong JSX của chúng ta, chúng ta sử dụng dấu
{}
để nhúng biểu thức JavaScript. - Chúng ta gọi
fruits.map()
, điều này sẽ duyệt qua mỗi trái cây trong mảng. - Cho mỗi trái cây, chúng ta trả về một phần tử
<li>
chứa tên trái cây.
Khi React render thành phần này, bạn sẽ thấy một danh sách trái cây được định dạng đẹp mắt trên trang của bạn. Thật kỳ diệu phải không?
Thêm Keys vào các phần tử danh sách
Nếu bạn đã thử chạy ví dụ trước đó, bạn có thể đã nhận được một cảnh báo trong console về keys. Keys là các thuộc tính đặc biệt giúp React nhận biết phần tử nào đã thay đổi, được thêm vào, hoặc bị xóa trong danh sách. Hãy cập nhật ví dụ của chúng ta để bao gồm keys:
import React from 'react';
function FruitList() {
const fruits = ['Apple', 'Banana', 'Cherry', 'Date'];
return (
<div>
<h2>Danh sách trái cây của tôi</h2>
<ul>
{fruits.map((fruit, index) => (
<li key={index}>{fruit}</li>
))}
</ul>
</div>
);
}
export default FruitList;
Trong phiên bản này, chúng ta sử dụng index
của mỗi trái cây làm key. Mặc dù sử dụng index
làm key thường không được khuyến khích cho danh sách động, nhưng nó là chấp nhận được cho danh sách tĩnh như này.
Định dạng mảng các đối tượng
Thường xuyên, bạn sẽ làm việc với các mảng chứa các đối tượng thay vì các chuỗi đơn giản. Hãy xem xét cách chúng ta có thể xử lý điều này:
import React from 'react';
function FruitList() {
const fruits = [
{ id: 1, name: 'Apple', color: 'Red' },
{ id: 2, name: 'Banana', color: 'Yellow' },
{ id: 3, name: 'Cherry', color: 'Red' },
{ id: 4, name: 'Date', color: 'Brown' },
];
return (
<div>
<h2>Danh sách trái cây của tôi</h2>
<ul>
{fruits.map((fruit) => (
<li key={fruit.id}>
{fruit.name} - {fruit.color}
</li>
))}
</ul>
</div>
);
}
export default FruitList;
Trong ví dụ này, chúng ta đang định dạng một mảng các đối tượng trái cây. Mỗi đối tượng có id
, name
, và color
. Chúng ta sử dụng id
làm key (điều này là tốt hơn nhiều so với việc sử dụng index
) và hiển thị tên và màu sắc của mỗi trái cây.
Sử dụng Map để tạo các thành phần tùy chỉnh
Khi kỹ năng React của bạn phát triển, bạn sẽ thường xuyên tạo các thành phần tùy chỉnh cho danh sách các mục. Hãy xem cách chúng ta có thể sử dụng map
với một thành phần FruitItem
tùy chỉnh:
import React from 'react';
function FruitItem({ name, color }) {
return (
<li style={{ color: color }}>
{name}
</li>
);
}
function FruitList() {
const fruits = [
{ id: 1, name: 'Apple', color: 'red' },
{ id: 2, name: 'Banana', color: 'yellow' },
{ id: 3, name: 'Cherry', color: 'red' },
{ id: 4, name: 'Date', color: 'brown' },
];
return (
<div>
<h2>Danh sách trái cây nhiều màu của tôi</h2>
<ul>
{fruits.map((fruit) => (
<FruitItem
key={fruit.id}
name={fruit.name}
color={fruit.color}
/>
))}
</ul>
</div>
);
}
export default FruitList;
Trong ví dụ này, chúng ta đã tạo một thành phần FruitItem
nhận name
và color
làm props. Chúng ta sau đó sử dụng map
để tạo một FruitItem
cho mỗi trái cây trong mảng. Cách tiếp cận này làm cho mã của chúng ta modular hơn và dễ bảo trì hơn.
Kỹ thuật Map nâng cao
Lọc trong khi Map
Đôi khi, bạn có thể muốn lọc danh sách trong khi map. Bạn có thể làm điều này bằng cách kết hợp map
với filter
:
import React from 'react';
function RedFruitList() {
const fruits = [
{ id: 1, name: 'Apple', color: 'red' },
{ id: 2, name: 'Banana', color: 'yellow' },
{ id: 3, name: 'Cherry', color: 'red' },
{ id: 4, name: 'Date', color: 'brown' },
];
return (
<div>
<h2>Danh sách trái cây đỏ của tôi</h2>
<ul>
{fruits
.filter(fruit => fruit.color === 'red')
.map(fruit => (
<li key={fruit.id}>{fruit.name}</li>
))
}
</ul>
</div>
);
}
export default RedFruitList;
Ví dụ này đầu tiên lọc các trái cây đỏ, sau đó map qua các trái cây đã lọc để tạo danh sách các phần tử.
Định dạng mảng嵌套
Đôi khi, bạn có thể phải làm việc với các mảng嵌套. Hãy xem xét một ví dụ:
import React from 'react';
function FruitCategories() {
const fruitCategories = [
{ category: 'Citrus', fruits: ['Orange', 'Lemon', 'Lime'] },
{ category: 'Berries', fruits: ['Strawberry', 'Blueberry', 'Raspberry'] },
{ category: 'Tropical', fruits: ['Mango', 'Pineapple', 'Coconut'] },
];
return (
<div>
<h2>Danh mục trái cây</h2>
{fruitCategories.map((category, index) => (
<div key={index}>
<h3>{category.category}</h3>
<ul>
{category.fruits.map((fruit, fruitIndex) => (
<li key={fruitIndex}>{fruit}</li>
))}
</ul>
</div>
))}
</div>
);
}
export default FruitCategories;
Trong ví dụ này, chúng ta đang map qua fruitCategories
array, và cho mỗi category, chúng ta map qua fruits
array của nó. Điều này tạo ra một cấu trúc danh sách嵌套.
Các phương thức Map phổ biến trong React
Dưới đây là bảng tóm tắt một số phương thức map phổ biến bạn có thể sử dụng trong React:
Phương thức | Mô tả | Ví dụ |
---|---|---|
map |
Chuyển đổi mỗi phần tử của mảng | array.map(item => <li>{item}</li>) |
filter |
Tạo một mảng mới với các phần tử vượt qua một bài kiểm tra | array.filter(item => item.length > 3) |
reduce |
Giảm một mảng xuống một giá trị duy nhất | array.reduce((acc, item) => acc + item, 0) |
forEach |
Thực hiện một hàm cho mỗi phần tử của mảng | array.forEach(item => console.log(item)) |
find |
Trả về phần tử đầu tiên vượt qua một bài kiểm tra | array.find(item => item.id === 3) |
some |
Kiểm tra xem có phần tử nào vượt qua bài kiểm tra không | array.some(item => item > 10) |
every |
Kiểm tra xem tất cả các phần tử đều vượt qua bài kiểm tra | array.every(item => item.length > 0) |
Nhớ rằng, mặc dù map
rất hữu ích,但这些其他方法 có thể là những công cụ mạnh mẽ trong bộ công cụ React của bạn!
Kết luận
Và thế là chúng ta đã cùng nhau khám phá qua vùng đất map
trong React, từ cách sử dụng cơ bản đến các kỹ thuật nâng cao. Nhớ rằng map
là như một con dao đa năng trong phát triển React - nó linh hoạt, mạnh mẽ, và bạn sẽ thường xuyên sử dụng nó.
Khi bạn tiếp tục hành trình React của mình, hãy tiếp tục thực hành với map
. Thử tạo các danh sách khác nhau, thử nghiệm với các cấu trúc dữ liệu phức tạp hơn, và xem bạn có thể kết hợp map
với các phương thức mảng khác để tạo ra giao diện người dùng động và tương tác.
Chúc các bạn mã hóa vui vẻ, và mong rằng các mảng của bạn luôn map đúng!
Credits: Image by storyset