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!

ReactJS - Map

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:

  1. Chúng ta có một mảng các tên trái cây lưu trữ trong biến fruits.
  2. Trong JSX của chúng ta, chúng ta sử dụng dấu {} để nhúng biểu thức JavaScript.
  3. Chúng ta gọi fruits.map(), điều này sẽ duyệt qua mỗi trái cây trong mảng.
  4. 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 namecolor 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