In React, lists are used to display multiple elements dynamically by iterating over data structures such as arrays. React uses the map() function to render a list of items. When rendering lists, it’s crucial to use a unique key prop to help React identify which items have changed, added, or removed.
1. Rendering a List
Basic Example:
function App() {
const fruits = ['Apple', 'Banana', 'Cherry'];
return (
<ul>
{fruits.map((fruit, index) => (
<li key={index}>{fruit}</li>
))}
</ul>
);
}
export default App;
Explanation:
- The
fruitsarray contains the list of items to render. - The
map()function iterates through each item, creating an<li>for each fruit. - The
keyprop ensures that React efficiently updates the DOM.
2. Using Unique Keys
Keys should be unique and stable for each list item. Avoid using index as a key unless the list is static and doesn’t change.
Example:
function App() {
const users = [
{ id: 1, name: 'John' },
{ id: 2, name: 'Jane' },
{ id: 3, name: 'Alice' },
];
return (
<ul>
{users.map((user) => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
}
export default App;
Why unique keys? Using id or a unique identifier ensures React efficiently updates only the changed elements, improving performance.
3. Rendering Components from Lists
You can render custom components instead of plain HTML elements.
Example:
function User({ name }) {
return <li>{name}</li>;
}
function App() {
const users = ['John', 'Jane', 'Alice'];
return (
<ul>
{users.map((user, index) => (
<User key={index} name={user} />
))}
</ul>
);
}
export default App;
4. Adding Dynamic Content
Example: Adding Items to a List
import { useState } from 'react';
function App() {
const [items, setItems] = useState(['Item 1', 'Item 2']);
const addItem = () => {
setItems([...items, `Item ${items.length + 1}`]);
};
return (
<div>
<button onClick={addItem}>Add Item</button>
<ul>
{items.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
</div>
);
}
export default App;
5. Filtering Lists
Example:
import { useState } from 'react';
function App() {
const [search, setSearch] = useState('');
const items = ['Apple', 'Banana', 'Cherry', 'Date'];
const filteredItems = items.filter((item) =>
item.toLowerCase().includes(search.toLowerCase())
);
return (
<div>
<input
type="text"
placeholder="Search"
value={search}
onChange={(e) => setSearch(e.target.value)}
/>
<ul>
{filteredItems.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
</div>
);
}
export default App;
6. Nested Lists
You can render nested lists by iterating over complex data structures.
Example:
function App() {
const categories = [
{ id: 1, name: 'Fruits', items: ['Apple', 'Banana', 'Cherry'] },
{ id: 2, name: 'Vegetables', items: ['Carrot', 'Broccoli', 'Spinach'] },
];
return (
<div>
{categories.map((category) => (
<div key={category.id}>
<h3>{category.name}</h3>
<ul>
{category.items.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
</div>
))}
</div>
);
}
export default App;
7. List Keys and Performance
React uses key props to track list items for updates. Without unique keys, React may incorrectly reorder or re-render components.
Do:
- Use unique and consistent keys (e.g., IDs).
- Ensure keys don’t change between renders.
Avoid:
- Using array indices as keys for dynamic or sortable lists.
8. Styling Lists
You can style lists using CSS, inline styles, or CSS-in-JS libraries like Styled Components.
Example with Inline Styles:
function App() {
const items = ['Apple', 'Banana', 'Cherry'];
return (
<ul>
{items.map((item, index) => (
<li key={index} style={{ color: 'blue', margin: '5px 0' }}>
{item}
</li>
))}
</ul>
);
}
export default App;
9. Handling Complex Operations
Sorting a List:
function App() {
const [items, setItems] = useState(['Cherry', 'Apple', 'Banana']);
const sortItems = () => {
const sorted = [...items].sort();
setItems(sorted);
};
return (
<div>
<button onClick={sortItems}>Sort Items</button>
<ul>
{items.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
</div>
);
}
export default App;
10. Key Takeaways
- Always use unique keys: This improves React’s rendering performance.
- Use the
map()function: Ideal for rendering lists dynamically. - Dynamic styles and classes: Make lists interactive and visually appealing.
- Modularize with components: Break lists into smaller, reusable components for better maintainability.
React lists are a fundamental feature, enabling dynamic and interactive UIs in your applications. By leveraging keys and React’s powerful rendering capabilities, you can handle lists efficiently and effectively