230711 React Todolist 볡슡

Yujung KimΒ·2023λ…„ 7μ›” 11일
0

React

λͺ©λ‘ 보기
11/17

Root Folder:
YJ-github\GMA\YJ-React\230711\todolist

πŸ€ useRef():

-> DOM μ•ˆμ— νŠΉμ • λ…Έλ“œ μš”μ†Œ(νƒœκ·Έ)에 μ ‘κ·Όν•΄ ν•΄λ‹Ή νƒœκ·Έλ₯Ό μ»¨νŠΈλ‘€ν•˜κ²Œ λ§Œλ“€μ–΄μ£ΌλŠ” ν•¨μˆ˜
-> μ»΄ν¬λ„ŒνŠΈ μ•ˆμ˜ λ³€μˆ˜λ‘œ ν™œμš©&μ μš©ν•  λ•Œ μ‚¬μš© κ°€λŠ₯

πŸ€ λ©”μ„œλ“œ ν•¨μˆ˜ μ•ˆμ˜ 콜백 ν•¨μˆ˜ μ‚¬μš© μ‹œ 단문일 경우 μ†Œκ΄„ν˜Έ μ‚¬μš©!!! (μ€‘κ΄„ν˜Έ μ‚¬μš©κΈˆμ§€)

ex)
TodoList.js

const getSearchResult = () => {
    return search === ""
    ? todo : todo.filter((it) =>
    {it.content.toLowerCase().includes(search.toLowerCase()))}
    // ↑ μ€‘κ΄„ν˜Έ μ‚¬μš© μ‹œ 였λ₯˜ λ°œμƒ 
    (it.content.toLowerCase().includes(search.toLowerCase())))
  }

πŸ€ Props둜 κ°€μ Έμ˜¨ ν•¨μˆ˜ μ‚¬μš©ν•  λ•Œ μΈμžκ°’ μœ λ¬΄μ— λ”°λ₯Έ ν‘œν˜„ 차이

ex)
TodoItem.js

const 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 값을 μ£ΌλŠ” 것이 μ€‘μš”ν•˜λ‹€.

참고링크: https://velog.io/@jiwonyyy/React-key-%EA%B0%92%EC%9D%B4-%ED%95%84%EC%9A%94%ED%95%9C-%EC%9D%B4%EC%9C%A0-Warning-Each-Child-in-a-list-should-have-a-unique-key-prop

ν•΄κ²° μ™„λ£Œ!!

πŸ’¨πŸ’¨πŸ’¨πŸ’¨πŸ’¨πŸ’¨πŸ’¨πŸ’¨πŸ’¨πŸ’¨πŸ’¨πŸ’¨πŸ’¨πŸ’¨πŸ’¨πŸ’¨πŸ’¨πŸ’¨πŸ’¨πŸ’¨πŸ’¨

μ΅œμ ν™” 관리
-> 항상 λ§ˆμ§€λ§‰
-> context / useReducer / Redux
-> μƒνƒœλ³€ν™” ν•¨μˆ˜ 및 μ½”λ“œλ₯Ό μ΅œμ†Œν™”ν•˜κ³ , μ½”λ“œ 관리

πŸ€ useMemo()

참고링크:
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) => {
      
    })
    }
  }

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보