
//App.jsx
import "./App.css";
import { useEffect, useState } from "react";
// 1. 리μ€νΈ λ§λ€κΈ°
// 2. κ²μμ΄μ λ§κ² λλ¬Όμ νν°λ§νκΈ°
function App() {
const items = ["κ°μμ§", "κ³ μμ΄", "ν λΌ", "μμμ΄", "νλ€"]; //λλ¬Ό 리μ€νΈ
const [animals, setAnimals] = useState(""); //μ¬μ©μκ° μ
λ ₯ν λ΄μ©
const [search, setSearch] = useState(items); //κ²μμ΄μ λν νν°λ΄μ©
useEffect(() => {
if (animals === "") { //μ¬μ©μκ° μ
λ ₯ν λ°μ΄ν°κ° λΉμ΄μλ€λ©΄ (null μ μ΄λ λλ€)
setSearch(items); // μ 체리μ€νΈ λ λλ§
} else {
setSearch(items.filter((animal) => animal.includes(animals))); //μλ μ€λͺ
μ°Έκ³
}
}, [animals]); //μ¬μ©μκ° μ
λ ₯ν κ°μ΄ λ³κ²½ λ λλ§ λ¦¬λ λλ§λ¨
const onChange = (e) => {
setAnimals(e.target.value);
};
return (
<div className="App">
<h3>κ²μ κΈ°λ₯</h3>
<input
type="text"
placeholder="κ²μμ΄λ₯Ό μ
λ ₯νμΈμ"
onChange={onChange}
/>
<ul>
{search.map((animal) => (
<li key={animal}>{animal}</li>
))}
</ul>
</div>
);
}
export default App;
κΈ°λ₯μ ꡬνν λλ μ½λλ₯Ό λ°λ‘ μμ±νλ κ²λ³΄λ€ ꡬν ν μμλ λ΄μ©μ κΈλ‘ λ¨Όμ μμ±ν΄λ³΄κ³ , νλ¦μ νμ ν λ€μμ μ½λλ₯Ό μμ±ν΄μ λ§λλ κ² λ νΈνκ² κ΅¬νν μ μλ€
π‘ κ²μκΈ°λ₯ λ΄μ© μ 리
π‘ μ΄ν΄κ° νμνλ λΆλΆ
λλ¬Ό 리μ€νΈλ₯Ό μμλ‘ items λ°°μ΄μ λ§λ€μλ€ μ΄λ μ£Όμν μ μ itemsμ λ°μ΄ν°λ κ³ μ μ΄ λμ΄μμ΄μΌ νλ€. κ°μ΄ λ³κ²½λμ§ μκΈ° λλ¬Έμ useStateλ₯Ό μ°λ κ² μλλΌ constλ₯Ό μ¬μ©ν΄μΌ νλ€.
items λ°°μ΄μ λμ΄λμ΄μΌ νκΈ° λλ¬Έμ map ν¨μλ₯Ό μ¬μ©νλ€ mapμΌλ‘ λ°λ³΅μμ±μ ν λμλ 무쑰건 mapμ λ릴 κ°μ΄ λ°°μ΄μ΄μ¬μΌλ§ νλ€ map λ리λ μμμ μ΄κΈ°κ°μ΄
βλ°°μ΄μ΄ μλ κ²½μ°μλ μ€λ₯κ° λλ€.β
itemsλ‘ λ°λ³΅μμ±μ νμ§ μμ μ΄μ λ μμμ λ§ν κ²κ³Ό λ΄μ©μ΄ λμΌνλ€. itemsμ λ°°μ΄μ κ³ μ κ°μ΄λ€. λ°μ΄ν°κ° λ³κ²½μ΄ λλ©΄ μ λκΈ° λλ¬Έμ searchμ μ΄κΈ°κ°μ itemsλ‘ λ£μ΄μ€μ μ¬μ©νλ€
// items λ°°μ΄μ animals(μ¬μ©μκ° μ λ ₯ν λλ¬Όλ€λ§) νν°λ§ setSharch(items.filter((animal) => animal.includes(animals)));μμ μ½λλ₯Ό μ€λͺ νμλ©΄
searchμ΄κΈ°κ°μλitemsμ¦ λλ¬Ό μ 체 리μ€νΈκ° μλ€. λλ¬Ό 리μ€νΈμμ κ²μμ΄μ μΌμΉνλ κ²λ§ νν°λ§μ νκ² νλ €λ©΄searchμ κ°μ λ³κ²½ν΄μ νλ©΄μ λ λλ§ λκ² ν΄μΌνλ€. κ·Έλμ μνλ³νν¨μμΈsetSearchλ₯Ό μ¬μ©ν΄μ itemsλ₯Ό νν°λ§ νλ κ²μ΄λ€.
νν°λ§ λλ 쑰건μanimal(λ물리μ€νΈ)μμ κ²μμ΄μ μΌμΉνλ λλ¬Όλ€λ§searchμ κ°μΌλ‘ μ€μ ν΄λκ³ , νν°λ§μ΄λ λ물리μ€νΈλ₯Ό λ λλ§λκ² ν΄μ£Όλ κ²μ΄λ€.
μ§§κ² μμ½νμλ©΄ κ²μμ΄μ μΌμΉνλ λλ¬Ό μμλ§ νν°λ§ ν΄μ£Όκ³ , νν°λ§λ λ΄μ©μ λ λλ§ ν΄μ£Όλ κ²μ΄λ€.
β includes()λ? κ΄νΈμμ λ€μ΄μλ κ²μ΄ λ°°μ΄μμ μλ μ§ μλ μ§ Boolean μ¦ true/falseλ‘ μλ €μ€λ€. μ μ½λμμ μμ μλ κ²μ animalμ κ³§ itemsμ΄κΈ° λλ¬Έμ itmesμμμ μ¬μ©μκ° μμ±ν λ°μ΄ν°κ° μλ μ§ μλ μ§ μ°Ύμμ£Όλ κ²μ μ μ μλ€.
κ²μ κΈ°λ₯ ꡬννλ κ²μ μ λ³΄κ³ λ€μ λ§λ€μ΄ λ΄€λ€. μλνμ§ μμμ§λ§ λ€μ λ§λ€κ³ 보λ μμ μ½λλ κ±°μ λκ°μμ μΆκ°λ λ΄μ©λ§ μ μκ²μ΄λ€.
μΆκ°λ λ΄μ©μ λλ¬Έμ, μλ¬Έμ κ΅¬λΆ μμ΄ κ²μ νν°κ° μλλ μ§ νμΈν΄λ³΄κ³ μΆμ΄μ listμμ itemλ€μ λλ¬Έμμ μλ¬Έμλ₯Ό μμ΄μ λ£μλ€.
ν΄λΉ λ¬Έμμ΄μ μλ¬Έμλ‘ λ³νν΄μ λ°ννλ λ©μλμ΄λ€. μ΄ λ©μλλ₯Ό μ¬μ©ν μ΄μ λ listμ λλ¬Έμμ μλ¬Έμκ° μμ¬ μμ κ²½μ°, λμλ¬Έμ κ΅¬λΆ μμ΄ νν°λ§λ κ²μ κ²°κ³Όλ₯Ό λ³΄κ³ μΆμ΄μμ΄λ€.
μλνλ μ리λ 리μ€νΈμ μλ λ¬Έμμ΄μ κ²μν λλ§λ€ μλ¬Έμλ‘ λ³κ²½ν΄μ λ°ννλ©΄ μ¬μ©μκ° μ무리 λμλ¬Έμλ₯Ό ꡬλΆμμ΄ μ μ΄λ κ²μ κΈ°λ₯μ΄ μΌκ΄λκ² μ μλλλ κ²μ μ μ μλ€.
function App() {
const searchList = [
"Life Cycle",
"event bubbling",
"μ κ·ννμ",
"Git",
"κ²μκΈ°λ₯",
];
const [searchListCopy, setSearchListCopy] = useState(searchList);
const [searchInput, setSearchInput] = useState("");
useEffect(() => {
if (searchInput === "") {
setSearchListCopy(searchList);
} else {
const lowerCaseInput = searchInput.toLowerCase();
setSearchListCopy(
searchList.filter((filteredItem) =>
filteredItem.toLowerCase().includes(lowerCaseInput)
)
);
}
}, [searchInput]);
return (
//...μλ΅
);
}
export default App;