Tell us what’s happening:
Sorry, your code does not pass. Don’t give up. The anonymous function for map() should return an li element with the item text for each element in the filteredItems array.
Your code so far
<!-- file: index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Shopping List</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/18.3.1/umd/react.development.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.3.1/umd/react-dom.development.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/7.26.5/babel.min.js"></script>
<script
data-plugins="transform-modules-umd"
type="text/babel"
data-presets="react"
data-type="module"
src="index.jsx"
></script>
<link rel="stylesheet" href="./styles.css" />
</head>
<body>
<main id="app-container"></main>
<script
data-plugins="transform-modules-umd"
type="text/babel"
data-presets="react"
data-type="module"
>
import { ShoppingList } from "./index.jsx";
const appContainer = document.getElementById("app-container");
const root = ReactDOM.createRoot(appContainer);
root.render(<ShoppingList />);
</script>
</body>
</html>
/* file: styles.css */
:root {
--dark-grey: #1b1b32;
--light-grey: #f5f6f7;
--dark-orange: #f89808;
--yellow: #f1be32;
--golden-yellow: #feac32;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
line-height: 1.5;
color: var(--dark-grey);
background-color: var(--dark-grey);
}
main,
.container {
display: flex;
flex-direction: column;
align-items: center;
}
.container {
background-color: var(--light-grey);
width: 90%;
margin: 20px;
padding: 10px;
}
h1 {
color: var(--dark-grey);
}
form {
text-align: center;
}
button {
cursor: pointer;
}
button {
cursor: pointer;
width: 100px;
margin: 3px;
color: var(--dark-grey);
background-color: var(--golden-yellow);
background-image: linear-gradient(#fecc4c, #ffac33);
border-color: var(--golden-yellow);
border-width: 3px;
}
button:hover {
background-image: linear-gradient(#ffcc4c, #f89808);
}
input {
color: var(--dark-grey);
margin-left: 5px;
padding: 3px;
}
li {
text-align: left;
margin: 10px 0;
}
.selected-item {
font-weight: bold;
}
@media (min-width: 425px) {
.container {
width: 400px;
}
}
/* file: index.jsx */
const { useState } = React;
const items = [
"Apples",
"Bananas",
"Strawberries",
"Blueberries",
"Mangoes",
"Pineapple",
"Lettuce",
"Broccoli",
"Paper Towels",
"Dish Soap",
];
export const ShoppingList = () => {
const [query, setQuery] = useState("");
const filteredItems = items.filter((item) => item);
return (
<div className="container">
<h1>Shopping List</h1>
<form>
<label htmlFor="search">Search for an item:</label>
<input
id="search"
type="search"
placeholder="Search..."
aria-describedby="search-description"
value={query}
onChange={(e) => setQuery(e.target.value)}
/>
<p id="search-description">Type to filter the list below:</p>
{/* User Editable Region */}
<ul>
{filteredItems.map(item => {
return <li key={item}>{item}</li>;
})}
</ul>
{/* User Editable Region */}
</form>
</div>
);
};
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0
Challenge Information:
Build a Shopping List App - Step 8
https://www.freecodecamp.org/learn/full-stack-developer/workshop-shopping-list-app/step-8