π 2024λ 12μ 첫째 μ£Ό ( 12.02 ~ 12.08 ) - μ€μ Q&A λͺ¨μ
"νμ΄ν ν¨μμμ μ€κ΄νΈ
{}λ₯Ό μ°λ©΄undefinedκ° λ°νλλ μ΄μ λ λκΉ?"
π κ²°λ‘
"νμ΄ν ν¨μμμ
{}μ μ¬μ©νλ©΄ λͺ μμ μΌλ‘ ν¨μμ λ³Έλ¬Έμ μ μνλ κ²μΌλ‘ κ°μ£Όλλ€. λ°λΌμ λ°νκ°μ΄ νμνλ©΄returnν€μλλ₯Ό λͺ μμ μΌλ‘ μμ±ν΄μΌ νλ€. JSX μ½λ μμ± μ, μ΄λ₯Ό μ λλ‘ μ΄ν΄νμ§ λͺ»νλ©΄ μμμΉ λͺ»ν μ€λ₯κ° λ°μν μ μλ€."
genres.map((g) => (
<li key={g}>{g}</li> // μ묡μ μΌλ‘ JSX λ°ν
));
//
genres.map((g) => {
return <li key={g}>{g}</li>; // λͺ
μμ μΌλ‘ JSX λ°ν
});
//
genres.map((g) => {
<li key={g}>{g}</li>; // undefined λ°ν
});
() μ JSX λΈλ‘μ κ·Έλ£Ήννλ μν μ΄λ€. μ΄ μμ JSX μ½λλ₯Ό μμ±νλ©΄, μ΄ μ μ²΄κ° νλμ ννμμΌλ‘ κ°μ£Όλλ€."κ·Έλ°λ°
useEffectμμμ μ½λ°± ν¨μμμλ μreturnμ μ¬μ©νμ§ μμμκΉ?"
π κ²°λ‘
"
useEffectμ μ½λ°± ν¨μλ μΌλ°μ μΈ κ° λ°νμ μν ν¨μκ° μλλ€. Reactμμ λΆμ ν¨κ³Ό(Side Effect)λ₯Ό μ²λ¦¬νκΈ° μν 곡κ°μΌλ‘, λ°νκ°μ΄ μμ΄λ μλνλ€. νΉμ κ²½μ°μλ§ μ 리 ν¨μ(Cleanup Function)λ₯Ό λ°ννλλ‘ μ€κ³λμκΈ° λλ¬Έμ΄λ€."
(1) λ°νκ°μ΄ νμνμ§ μμ κ²½μ°
useEffect(() => {
fetch(`https://yts.mx/api/v2/movie_details.json?movie_id=${id}`)
.then((response) => response.json())
.then((data) => console.log(data));
}, []);
(2) λ°νκ°μ΄ νμν κ²½μ° : μ 리 ν¨μ
useEffect(() => {
const handleResize = () => console.log("Window resized");
window.addEventListener("resize", handleResize);
// μ 리 ν¨μ λ°ν
return () => {
window.removeEventListener("resize", handleResize);
};
}, []);
π κ²°λ‘
"JSON νμμ λ°μ΄ν°λ₯Ό μμ νκ² μ μ‘νκΈ° μν ν ν° κΈ°λ° μΈμ¦ λ°©μμ΄λ€."
JWT(JSON Web Token)Header : ν ν°μ νμ
κ³Ό ν΄μ± μκ³ λ¦¬μ¦μ λͺ
μνλ€.{
"alg": "HS256",
"typ": "JWT"
}
Payload : μΈμ¦κ³Ό κ΄λ ¨λ μ 보λ₯Ό λ΄κ³ μλ€. μλ₯Ό λ€μ΄ μ¬μ©μ ID, κΆν, ν ν° λ§λ£ μκ° λ±μ λ°μ΄ν°{
"sub": "1234567890",
"name": "John Doe",
"admin": true,
"exp": 1672531199
}
Signature : ν€λμ νμ΄λ‘λλ₯Ό νΉμ λΉλ° ν€λ‘ μνΈννμ¬ μμ±ν μλͺ
μ΄λ€. μ΄ μλͺ
λλΆμ JWTκ° λ³μ‘°λμ§ μμμμ κ²μ¦ν μ μλ€.HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
secret
)
Authorization: Bearer <JWT> μ ν ν°μ ν¬ν¨νμ¬ μλ²λ‘ μμ²μ 보λΈλ€.)π¬γ €JWT μ₯μ
μν λΉμ μ§: μλ²λ μΈμ μ 보λ₯Ό μ μ₯νμ§ μμλ λλ―λ‘ μλ² λΆνκ° μ λ€.κ°νΈ νμ₯μ±: μ¬λ¬ μλΉμ€ κ° μΈμ¦ μ 보λ₯Ό 곡μ νκΈ° μ¬μ, λΆμ° μμ€ν μμ μ μ©νλ€.μμ ν λ°μ΄ν° μ μ‘: μλͺ μ ν΅ν΄ λ³μ‘° μ¬λΆλ₯Ό κ²μ¦ν μ μμ΄ λ³΄μμ΄ κ°νλλ€.
λ§λ£ μκ° μ€μ : JWTλ κΈ°λ³Έμ μΌλ‘ λ§λ£ μ κΉμ§ μ ν¨νλ―λ‘, λ§λ£ μκ°μ λ°λμ μ€μ ν΄μΌ 보μμ μ μ§ν μ μλ€.ν ν° νμ·¨ λ°©μ§ : HTTPSλ₯Ό μ¬μ©νμ¬ λ€νΈμν¬ μμ ν ν° νμ·¨λ₯Ό λ§κ³ , λ―Όκ°ν¨ μ 보λ₯Ό νμ΄λ‘λμ ν¬ν¨νμ§ μμμΌ νλ€.π κ²°λ‘
"React κ°λ° λͺ¨λμμ
React.StrictModeκ° νμ±νλμ΄ μκΈ° λλ¬Έμ΄λ€. "
React.StrictMode μμλ νΉμ μ½λκ° μμλλ‘ μλνλμ§ νμΈνκΈ° μν΄ React μ»΄ν¬λνΈμ λΌμ΄ν μ¬μ΄ν΄ λ©μλμ μΌλΆ λμμ μλμ μΌλ‘ 2λ² νΈμΆνλ€. console logλ 2λ² μΆλ ₯λλ€.μ ν리μΌμ΄μ μμ μ μ¬μ μΈ λ¬Έμ λ₯Ό κ°μ§νκ³ κ²½κ³ νκΈ° μν κ°λ° λꡬμ΄λ€. λ°°ν¬ νκ²½μμλ μν₯μ λ―ΈμΉμ§ μλλ€.
Mount / Unmount π¬ StrictModeλ₯Ό μ μ¬μ©ν΄μΌ νλ?
- μ ν리μΌμ΄μ μ μμ μ±κ³Ό μ½λ νμ§μ λμ΄λ λ° μ 리νλ€. μ°Έκ³ λ‘
StrictModeλ κ°λ° κ³Όμ μμλ§ λμνλ€.