π₯ Trouble Shooting
Text content did not match. Server: "x" Client: "o"
μμ κ°μ μ€λ₯κ° κ°νμ μΌλ‘ λ°μ. λ§ κ·Έλλ‘ λλ€ μλλ€ ν΄μ.. γ γ γ γ γ γ νΌλμ€λ¬μ λ€. μ€λ₯ μμΈ Next.js λ κΈ°λ³Έμ μΌλ‘ SSR μ λ°λ¦. μμ μ€λ₯λ λΈλΌμ°μ μμ λ λλ§ ν HTMLκ³Ό μλ²μ HTML μ΄ μΌμΉνμ§ μλ€λ μ€λ₯λ€. μ¬μ€ μ¬κΈ°μλΆν° μ΄ν΄κ° μ λ¨.. μλ²μμ λ€ λ§λ€μ΄μ 보λ΄μ£Όλλ° μ λΈλΌμ°μ λ λΉκ΅ν΄μ μ€λ₯κ° λλ€λ κ±°μ§..? π κ·Όλ°, μ°Έκ³ ν 첫 λ²μ§Έ λ§ν¬λ₯Ό 보면, λΈλΌμ°μ μμ DOMμ λ§λ€κ³ Hydrate νλ μμ μμ κ°μ κ°μ§κ³ μλ HTML μ΄ λ€λ₯΄λ€λ κ². λ΄ μ€λ₯μ κ²½μ° μ Hey λ€μ μλ μ¬μ©μκ° xμ oλ₯Ό λλ€ νκ² κ°λλ‘ μ΄κΈ°νκ° λμ΄ μλλ°, μ¬κΈ°μ λΈλΌμ°μ λ μλ²κ° λ λ€ κ°μ μ¬μ©μ(λ λ€ x, λ λ€ o) λ©΄ μ€λ₯κ° μ λκ³ λ€λ₯΄λ©΄ μ€λ₯κ° λλ κ±°μ..
Github Action test κ° λλμ§ μλλ€..
Github ActionμΌλ‘ CICD μ μ©νλ €λλ°, test κ° κ³μ λμκ°λ©° λλμ§ μμλ€. 39λΆ κ±Έλ¦° κ²λ λ΄κ° μ€κ°μ μ·¨μν΄μ μ μ λ.. test κ° λ‘컬μμ μ±κ³΅νκ³ , actionμμλ μ±κ³΅μ ν¨! κ·Όλ° λ€μμΌλ‘ λμ΄κ°μ§λ μμλ€. π₯² κ·Έλμ yarn μΌλ‘ λ°κΏ¨λ€κ° env: CI=trueλ₯Ό μΆκ°νλ€κ° λ리 μΉλ€κ° κ²°κ΅ μ°Ύμλ. package.jsonμ scriptμ testμ --watchAll μ΅μ μ μ€ κ²μ μμ νλλ λλ€! κ·Έ μ΅μ λλ¬Έμ κ³μ ν μ€νΈκ° λμκ°λ κ±°μλ€.. μ κ²λ λͺ¨λ₯΄κ³ 2μκ° κ°κΉμ΄ μ½μ§νλ€ π μλ μ²λΌ μ§μμ£Όμλλ μ λλ€! μ°Έκ³ https://github.com/orgs/community/discussions/25250
Husky pre-commit fails with code 1 (error)
yml νμΌμ λ¬Έλ²μ΄ νλ¦° κ³³μ΄ μλλ° μ»€λ°νλ €κ³ νλ©΄ κ³μ μ΄λ° μ€λ₯κ° λ΄λ€. ν΄λΉ νμΌμ eslint 무μνλ€κ³ λͺ μλ₯Ό ν΄μ€λ κ³μ 컀λ°μ΄ μλ¨. git commit -m "message" --no-verify 컀λ°ν λ μ΄λ κ² λͺ μνμ¬ ν΄κ²°ν¨! μ°Έκ³ https://github.com/typicode/husky/issues/1014

Netlify λ°°ν¬ process.env.CI = true μ€λ₯ / Preview κΈ°λ₯ μ΄μ©νκΈ°
Netlify λ°°ν¬λ κ΅μ₯ν μ½λ€! vercel λ§νΌ μ¬μ. κΉνμ μ°κ²°νκ³ νκ²½ λ³μλ₯Ό μ¬μ©νκ³ μλ€λ©΄, λ£μ΄μ£Όλ©΄ λ! κ·Όλ° λ°°ν¬νλ€κ° μ΄λ° μ€λ₯κ° λ΄λ€. λ³μκ° true λ‘ λμ΄ μμ΄μ κ·Έλ¬λ€. λ°°ν¬ μΈν μΌλ‘ λ€μ΄κ°λ€. λΉλ μΈν λΆλΆμμ CI=false λ₯Ό yarn build μμ μΆκ°ν΄μ£Όλ©΄ λλ€! λΉλκ° μ±κ³΅μ μΌλ‘ λλ€! π€ Netlify μ¬μ© μ΄μ ! ν νλ‘μ νΈλ λͺ¨λ°μΌ κΈ°μ€μ΄λΌ νμμ μΌλ‘ λͺ¨λ°μΌλ‘ UIUX λ₯Ό 체ν¬ν΄μΌ νλ€. λλ¬Έμ main μ ν©μΉκΈ° μ , λ΄κ° μμ ν κ²μ΄ λͺ¨λ°μΌμμλ μνλ κ²μ²λΌ 보μ΄λμ§ μμλ‘ νμΈμ ν΄μ€μΌ νλ€. μ΄λ΄ λ μ μ©νκ² μ°μ΄λ Netlify μ ν리뷰 κΈ°λ₯!!!!! μ΄κ±Έ μ΄μ μλΌλ μκ² λ κ²μ μ λ§ κ°μ¬νλ€ γ γ dev μ pr μ 보λ΄κ³ merge κ° λ..

λ λλ§μ΄ 3λ² λλ€..
리μ‘νΈμμ λ λλ§ λλ μ΄μ . 1. state λ³κ²½μ΄ μμ λ 2. μλ‘μ΄ props κ° λ€μ΄μ¬ λ(props μ λ°μ΄νΈ) 3. λΆλͺ¨κ° λ λλ§ λ λ 4. forceUpdate κ° μ€νλ λ. λ¬Έμ μμΈ 1. λΆλͺ¨λ‘λΆν° λ°μ editForm ν¨μλ₯Ό μ΄μ©ν΄ setStateλ₯Ό ν΄μ£ΌκΈ° λλ¬Έμ λΆλͺ¨μ stateκ° λ³κ²½λμ΄ μμμ μμ μ»΄ν¬λνΈμΈ TagList λ μ¬λ λλ§ λ¨. 2. TagList μ»΄ν¬λνΈμ tagList state λ μ΅μ΄μ λ³κ²½λκ³ κ·Έλ€μ λ λλ§λΆν°λ λ³κ²½μΌλ‘ μΈμ§λμ§ μμ useEffect μμ editForm μ΄ μ€νλμ§ μμ. 3. λλ¬Έμ λΆλͺ¨ editForm ν¨μμ κ°μ₯ μ²μμ μμ λ μ λ³΄λ‘ λμ€κ³ κ·Έ νμ κ³μ μ΄κΈ° μ§μ κ°μΌλ‘ λμ΄. λ¬Έμ ν΄κ²° 1. editForm ν¨μκ° μλ ta..

github pages λ‘ λ°°ν¬μ react-router μ€μ feat. λ°°ν¬νλλ° ν° νλ©΄λ§ λμ¬ λ
λ‘컬μμλ μ μ€νλλ νλ‘μ νΈκ° github pages λ‘ λ°°ν¬ ν νμ νλ©΄λ§ λμ¨λ€λ©΄? μμΈ μλ 곡μ λ¬Έμλ₯Ό 보면 CRA μΉ, μ±μ κΈ°λ³Έμ μΌλ‘ μλ² λ£¨νΈμμ νΈμ€ν λλ€κ³ κ°μ νμ¬ λΉλλ©λλ€. λλ¬Έμ λΉλλ₯Ό νκ² λλ©΄ νλ‘μ νΈλ https://leeseul-moon.github.io/todo_list/ μ μ‘΄μ¬ν©λλ€. (todo_list λ νλ‘μ νΈ ν΄λ) νμ§λ§ λΌμ°ν°λ μ κ° μ μμ±ν κ²μ λ°λΌ https://leeseul-moon.github.io/ λ‘ μ΄λμν΅λλ€. νλ‘μ νΈ μμΉμ λΌμ°ν°κ° κ°λ¦¬ν€λ μμΉκ° λ€λ₯΄κΈ° λλ¬Έμ λΌμ°ν°κ° μ λλ‘ μλνμ§ μμ΅λλ€. ν΄κ²° λΌμ°ν°μ κΈ°λ³Έ URL μ΅μ μ μ£Όμ΄ / κ° μλ /todo_list/ λ‘ μ΄λμν΅λλ€. package.json μ 5λ² μ€ heme..

React.memo μ¨λ μ»΄ν¬λνΈ κ³μ λ λλ§ λ¨... -> ν΄κ²°!βπ» feat. useMemo, useCallback
λΆνμν λ λλ§μ μ νκ³ μΆλ€..! μλ‘ μ΄ κΉλλ€. λ°μμ λΆλ€μ μλλ‘ μμ λ΄λ €μ λ¬Έμ μ , μμΈμ? ν΄κ²°! μ΄ λΆλΆλ§ 보μΈμ! 리μ‘νΈ κ³΅λΆ 5μΌμ°¨μ μ΄μ κΉμ§ λ°°μ΄ κ²μ μ€μ΅νκΈ° μν΄ Habit Tracker λ₯Ό λ§λ€μλ€. μ΅κ΄μ μΆκ°ν μ μκ³ μμ +, - λ²νΌμΌλ‘ μΉ΄μ΄νΈλ₯Ό μμ ν μ μλ€. 맨 μμ Habit Tracker μ μ«μλ μ΅κ΄ 리μ€νΈ μ€ μ²΄ν¬κ° λ κ²λ€μ κ°―μλ€. μΈ νλͺ© λ€ 0μ΄ μλλ μ«μ 3μ΄ λμ¨λ€. μ΄μ΄μ΄μ΄ λ¨μν μ΅κ΄ μΆμ κΈ°(?) π ν΄λμ€ μ»΄ν¬λνΈλ‘ ν΄λΉ νΈλ 컀 λ§λλ μΈκ° 2λ°°μμΌλ‘ λ³΄κ³ νΌμμ ν¨μν μ»΄ν¬λνΈλ‘ λ§λ€μ΄ λ³Έ κ±°λΌ μ’ ν·κ°λ Έλ€. μκ°λ³΄λ€ μκ°μ΄ λ κ±Έλ Έλ€. κ·Όλ° μ΄κ±° λ§λλ κ²λ³΄λ€ React.memo 곡λΆνλλ° μκ° λ κ±Έλ¦Ό γ 리μ‘νΈ μ»¨μ μ λ¨μνλ€. ..
2μ£Όμ°¨ μ€μ΅ κ³Όμ - μλ¬λλ μ΄μ μ€λͺ
let b = 1; function hi() { const a = 1; let b = 100; b++; console.log(a, b); } // console.log(a); // ReferenceError: a is not defined // μ μ μ€μ½νμμ λ‘컬 μ€μ½νμ λ³μλ₯Ό μ°Έμ‘°ν μ μμ΅λλ€. // h1() μμμ μΆλ ₯νλ©΄ κ°μ΄ μ λμ΅λλ€. console.log(b); // 1 hi(); // 1, 101 console.log(b); // 1 μ€μ½νμ κ°λ μ μκ³ μλ€λ©΄ μ½κ² ν μ μλ μ€μ΅ κ³Όμ μμ΅λλ€. μ°Έκ³ https://lazygay.tistory.com/17 JS μ€μ½νμ μ€μ½ν μ²΄μΈ μ€μ½ν Scope μ€μ½νλ μλ³μ(λ³μ, ν¨μ, ν΄λμ€ μ΄λ¦) μ κ·Ό κ·μΉμ λ°λ₯Έ μ ν¨ λ²μμ λλ€. ..
nodemon μ€μΉ μ€λ₯ zsh : command not fount : nodemon
nodemon μ μ μ₯κ³Ό λμμ μ€ν¬λ¦½νΈλ₯Ό μ½μμ μ€νμν¬ μ μλ μμ£Ό μ μ©ν ν¨ν€μ§μ λλ€! (μ°Έκ³ λ‘ μ λ zsh ν°λ―Έλμ μ¬μ©ν©λλ€.) nodemon νκ³ npm install nodemon -g νκ³ nodemon νλ©΄ λμΌ νλλ°, μλμ κ°μ μ€λ₯ λ°μ. zsh : command not fount : nodemon ν΄κ²°μ± - ν΄λλ₯Ό μμ±ν΄μ μ μ μ€μΉ (global) μμΉλ₯Ό λ³κ²½ μλλ₯Ό μμλλ‘ λ°λΌ μΉλ€. mkdir ~/.npm-global npm config set prefix '~/.npm-global' vi ~/.zprofile μ΄λ κ² νλ©΄ vi νΈμ§κΈ°λ‘ λ€μ΄κ°λ€. i λ₯Ό λλ¬ νΈμ§νκΈ° λͺ¨λλ‘ μ ν export PATH=~/.npm-global/bin:$PATH νΈμ§λͺ¨λμμ μμ κ°μ΄ μ¨..