Root Folder:
YJ-github\GMA\YJ-React\230711\todolist
-> DOM μμ νΉμ λ
Έλ μμ(νκ·Έ)μ μ κ·Όν΄ ν΄λΉ νκ·Έλ₯Ό 컨νΈλ‘€νκ² λ§λ€μ΄μ£Όλ ν¨μ
-> μ»΄ν¬λνΈ μμ λ³μλ‘ νμ©&μ μ©ν λ μ¬μ© κ°λ₯
ex)
TodoList.jsconst getSearchResult = () => { return search === "" ? todo : todo.filter((it) => {it.content.toLowerCase().includes(search.toLowerCase()))} // β μ€κ΄νΈ μ¬μ© μ μ€λ₯ λ°μ (it.content.toLowerCase().includes(search.toLowerCase()))) }
ex)
TodoItem.jsconst onChangeCheckbox = () => { onUpdate(id); } // ν¨μλ₯Ό λ°λ‘ μ μνμ§ μκ³ input μμ μ§μ μ μΌλ‘ νμ΄ν ν¨μλ₯Ό μ¬μ©ν΄λ λ¨ // <input onChange={() => onUpdate(id)} /> // μλ onUpdate() ν¨μμ μΈμκ°μ μ¬μ©νκΈ° μν¨ // <input onChange={onUpdate} /> // μΈμκ°μ΄ μλ€λ©΄ μμ²λΌ μ¬μ© κ°λ₯ const onClickDelete = () => { onDelete(id); }
π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨
Warning: Each child in a list should have a unique "key" prop.
TodoList.js
<TodoItem key={it.id} {...it} />
TodoItemμ keyλ₯Ό ν λΉνμ¬ ν΄κ²°
νμ§λ§ μμΈμ§ λͺ¨λ¦
μ..μ΄λμΌνμ£
κ·Έλμ μ°Ύμλ³Έ κ²°κ³Ό β
Key κ°μ΄ λκ°μ?
keyλ μλ¦¬λ¨ΌνΈ λ¦¬μ€νΈλ₯Ό λ§λ€ λ ν¬ν¨ν΄μΌ νλ νΉμν λ¬Έμμ΄μ΄λ€.
keyλ 리μ‘νΈκ° μ΄λ€ νλͺ©μ λ³κ²½, μΆκ° λλ μμ ν μ§ μλ³νλλ°μ λμμ μ€λ€.
Key κ°μ΄ μ νμνκ°μ?
μ§κΈ ꡬνν κΈ°λ₯μ λ¨μν mapμ ν΅ν λμ΄μ΄μ§λ§, μ΄ keyκ°μ΄ μμΌλ©΄, μΆνμ λκΈ μμ , μμ λ±μ ν λμ μ΄λ€ μμλ₯Ό μλ―Ένλμ§λ₯Ό μ»΄ν¨ν°κ° νμΈνκΈ° μ΄λ ΅κΈ° λλ¬Έμ κ³ μ μ key κ°μ μ£Όλ κ²μ΄ μ€μνλ€.
ν΄κ²° μλ£!!
π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨
μ΅μ ν κ΄λ¦¬
-> νμ λ§μ§λ§
-> context / useReducer / Redux
-> μνλ³ν ν¨μ λ° μ½λλ₯Ό μ΅μννκ³ , μ½λ κ΄λ¦¬
μ°Έκ³ λ§ν¬:
https://velog.io/@jinyoung985/React-useMemo%EB%9E%80
// useMemo() μ¬μ© μλ¬Έ
const value = useMemo(() => {
return calculate();
},[item])
-> λμΌν κ°μ λ°ννλ ν¨μλ₯Ό λ°λ³΅μ μΌλ‘ νΈμΆν΄μΌνλ€λ©΄ μ²μ κ°μ κ³μ°ν λ ν΄λΉ κ°μ λ©λͺ¨λ¦¬μ μ μ₯ν΄ νμν λλ§λ€ λ€μ κ³μ°νμ§ μκ³ λ©λͺ¨λ¦¬μμ κΊΌλ΄μ μ¬μ¬μ©νκ² νλ€.
π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨π¨
β 볡μ΅νλ€ μκΈ΄ κΆκΈμ λ€ β
reactλ jsμ λ€λ₯΄κ² ν¨μ μ returnλ¬Έμ΄ λ§μ΄ μ°μ΄λ λ―νλ°..(μλ μμ μ°Έκ³ ) μλ jsμμλ μ¨μΌνλ μν©μΈλ° λ΄κ° λͺ¨λ₯΄λ κ±Έμ§λ? => returnλ¬Έμ λν΄ λ 곡λΆν΄μΌ ν λ―
μλ λ§ν¬ μ°Έκ³ νμ
https://helicopter55.tistory.com/2
const onUpdate = (targetId) => {
setTodo(todo.map((it) => {
if(it.id === targetId) {
return {
...it,
isDone: !it.isDone
}
} else {
return it
}
}
))
}
const getSearchResult = () => {
return search === "" ? todo : todo.filter((it) => {
})
}
}