π 2025λ 01μ λμ§Έ μ£Ό ( 01.06 ~ 01.12 ) - μ€μ Q&A λͺ¨μ
"Link, useNavigate, Navigate λ±λ± λ€μνκ² μλλ° κ°κ° μ΄λ€ μν©μμ μ¬μ©νλ κ² μ’μκΉ?"
π κ²°λ‘
"
μ μ μ΄λμLinkλ₯Ό,λμ μ΄λμ΄λμ΄λ²€νΈ κΈ°λ° μ΄λμuseNavigateλ₯Ό,μ‘°κ±΄λΆ λ λλ§μ νμ©ν μ΄λμNavigateλ₯Ό μ¬μ©νλ©΄ μ ν©νλ€."
<a> νκ·Έμ λΉμ·ν μν μ νλ€.SPA μ μ₯μ μ νμ©νμ¬ λ¦¬μμ€λ₯Ό μ μ½νλ©° λΆλλ¬μ΄ νμ΄μ§ μ νμ΄ κ°λ₯νλ€.SEO λ₯Ό κ³ λ €ν μ΅μ ν μ²λ¦¬κ° λμ΄μλ€.<Link to="/about">Go to About</Link>
π€ μ μ μ΄λμ΄λ?
- URL κ²½λ‘κ° κ³ μ μ μΌλ‘ κ²°μ λμ΄ μμ΄ μ¬μ©μκ° νΉμ λ§ν¬λ₯Ό ν΄λ¦νλ©΄ ν΄λΉ νμ΄μ§λ‘ μ΄λνλ μν©μ λ§νλ€.
- μ¦, μ¬μ©μμ νλκ³Ό 무κ΄νκ² νμ λμΌν κ²½λ‘λ‘€ μ΄λνλ κ²½μ°μ΄λ€.
function Navbar() { return ( <nav> <Link to="/">Home</Link> <Link to="/about">About</Link> <Link to="/contact">Contact</Link> </nav> ); }
const navigate = useNavigate();
navigate("/dashboard");
function PrivateRoute({ isLoggedIn }) {
if (!isLoggedIn) {
return <Navigate to="/login" replace />;
}
return <h1>Welcome to the private page!</h1>;
}
π€ νλ‘κ·Έλ¨μ μ μ΄λ?
- μ½λλ‘ νΉμ λμμ λ Όλ¦¬μ μΌλ‘ κ²°μ νκ±°λ μ€ννλλ‘ μ μ΄νλ κ²μ μλ―Ένλ€.
- React Routerμμ νλ‘κ·Έλ¨μ μ μ΄
- μ¬μ©μμ νλμ΄λ νΉμ 쑰건μ λ°λΌ μ½λλ‘ μ΄λμ μ μ΄νλ κ²½μ°
- μλ₯Ό λ€μ΄, μ¬μ©μκ° λ‘κ·ΈμΈνλ©΄
/dashboardλ‘ μ΄λνκ±°λ, μΈμ¦μ΄ μ€ν¨νλ©΄/loginμΌλ‘ 리λ€μ΄λ νΈ νλ μν©function Login({ isAuthenticated }) { const navigate = useNavigate(); if (isAuthenticated) { // λ‘κ·ΈμΈ μ±κ³΅ μ λμ보λλ‘ μ΄λ navigate("/dashboard"); } return <button>Login</button>; }
π€ Linkμ Navigateλ μ»΄ν¬λνΈ, useNavigateλ HookμΈλ° μ μ΄λ κ² λλ μ‘μκΉ?
π
LinkμNavigateμ 곡ν΅μ (μ»΄ν¬λνΈ)
- React μ»΄ν¬λνΈλ
JSXλ‘ μμ±λμ΄ DOMμ λ λλ§λλ€.- νμ΄μ§μμ
UI μμμ²λΌ λ λλ§λλ©° μ¬μ©μκ°μ§μ μνΈμμ©ν μ μλ€.π
useNavigateμ νΉμ§ (Hook)
- Hookμ
μ»΄ν¬λνΈ λ΄λΆμμ μνλ λ‘μ§μ μ²λ¦¬νλ λ° μ¬μ©λλ€.- νμ΄μ§ μ΄λκ³Ό κ°μ λμμ λ λλ§κ³Ό
λ 립μ μΌλ‘ μ½λμμ μ μ΄ν λ μ μ©νλ€.π μ΄λ»κ² ꡬλΆλμμκΉ?
μ μ μ΄λμ΄ νμν κ²½μ°, UIλ‘ λͺ νν λλ¬λλLinkλNavigateκ° μ ν©νλ€.λμ μ΄λμ΄λ μ΄λ²€νΈμ λ°λΌ μ΄λ κ²½λ‘λ₯Ό λ³κ²½ν κ²½μ°,useNavigateμ κ°μ ν¨μ κΈ°λ° μ μ΄κ° μ ν©νλ€.
UIλ₯Ό λ λλ§νλ λ¨μ μ΄λ€.JSXλ‘ μμ±λλ©°, μ¬μ©μμ μνΈμμ© ν μ μλ μμλ‘ ννλλ€.μν κ΄λ¦¬λ λ‘μ§μ μ²λ¦¬νκΈ° μν λꡬ μ΄λ€.λμΌν μ
λ ₯ β λμΌν μΆλ ₯ : λμΌν state μ action μ μ
λ ₯μΌλ‘ λ°μΌλ©΄ νμ λμΌν κ²°κ³Όλ₯Ό λ°νν΄μΌ νλ€.λΆμ ν¨κ³Όκ° μμ΄μΌ νλ€ : ν¨μ λ΄λΆμμ μΈλΆ μν(ex. μ μ λ³μ)λ₯Ό λ³κ²½νκ±°λ, λ€νΈμν¬ μμ² κ°μ μΈλΆ μμ
μ μννλ©΄ μ λλ€.κΈ°μ‘΄μ μνλ₯Ό μ§μ λ³κ²½νμ§ μμμΌ νλ€ : reducerλ νμ μλ‘μ΄ μνλ₯Ό λ°ννλ©°, κΈ°μ‘΄ μν κ°μ²΄λ₯Ό μ§μ μμ νλ©΄ μ λλ€.const reducer = (state, action) => {
switch (action.type) {
case 'INCREMENT':
return { ...state, count: state.count + 1 }; // μλ‘μ΄ μν λ°ν
case 'DECREMENT':
return { ...state, count: state.count - 1 }; // μλ‘μ΄ μν λ°ν
default:
return state; // μνλ₯Ό λ³κ²½νμ§ μκ³ κ·Έλλ‘ λ°ν
}
};
const reducer = (state, action) => {
switch (action.type) {
case 'INCREMENT':
state.count += 1; // κΈ°μ‘΄ μνλ₯Ό μ§μ μμ (λΉμμ)
return state; // κΈ°μ‘΄ μν λ°ν (μλ‘μ΄ κ°μ²΄ λ°ν X)
case 'DECREMENT':
console.log("Decrementing..."); // μΈλΆ λΆμν¨κ³Ό λ°μ (λΉμμ)
return { ...state, count: state.count - 1 };
default:
return state;
}
};
π€ μ μ΄λ° μμ ν¨μκ° μ€μν κ±ΈκΉ?
μμΈ‘ κ°λ₯μ±: λμΌν μ λ ₯μ λν΄ νμ λμΌν μΆλ ₯μ 보μ₯νκΈ° λλ¬Έμ λλ²κΉ κ³Ό ν μ€νΈκ° μ¬μμ§λ€.μν λ³κ²½ μΆμ κ°λ₯: κΈ°μ‘΄ μνλ₯Ό λ³κ²½νμ§ μκ³ μλ‘μ΄ κ°μ²΄λ₯Ό λ°ννλ©΄, μν λ³κ²½ μ΄λ ₯μ μΆμ νκ±°λ, λΆλ³μ±μ μ μ§ν μ μλ€.React μ΅μ ν μ§μ: Reactλ μν κ°μ²΄κ° λ³κ²½λ λ μ΄λ₯Ό κ°μ§νμ¬ μ»΄ν¬λνΈλ₯Ό λ€μ λ λλ§νλ€. κΈ°μ‘΄ μνλ₯Ό μ§μ μμ νλ©΄ λ³κ²½μ κ°μ§ν μ μμΌλ―λ‘, μλ‘μ΄ μνλ₯Ό λ°νν΄μΌ νλ€.
"Reactμμλ μνκ° λ³νλλ©΄ 리λ λλ§μ΄ λ°μνλ λ°, μ΄λ»κ² νλ¨ν κΉ?"
π Reactμ 리λ λλ§ μ‘°κ±΄
- μνκ° λ³κ²½λμμ λ (κ°μ²΄μ μ°Έμ‘°κ°μ΄ λ³κ²½λ¨)
- λΆλͺ¨ μ»΄ν¬λνΈμμ μ λ¬λ°μ propsκ° λ³κ²½λμμ λ
- κ°μ λ‘ λ λλ§μ νΈλ¦¬κ±°νλ ν¨μκ° νΈμΆλμμ λ ( ex.
forceUpdate()
π€ μμ λΉκ΅λ?
- κ°μ²΄ λ΄λΆμ κ°κΉμ§ λΉκ΅νμ§ μκ³ μ°Έμ‘°κ°λ§ λΉκ΅νλ κ²μ λ§νλ€.
"λ λ©μλ λ€ λ°°μ΄ μμμ μΈλ±μ€λ₯Ό μ°Ύλ λ° μ¬μ©λλ λ° μ΄λ€ μ°¨μ΄μ μ΄ μμκΉ?"
-1 μ λ°ννλ€.=== ) λ₯Ό μ¬μ©νλ€.λ°°μ΄ μμκ° μμκ° μΌ λ μ£Όλ‘ μ¬μ©λλ€.array.indexOf(searchElement, fromIndex)
searchElement : μ°Ύκ³ μ νλ κ°fromIndex (μ ν) : κ²μμ μμν μΈλ±μ€(κΈ°λ³Έκ°: 0)-1 μ λ°ννλ€.array.findIndex(callback(element, index, array), thisArg)
callback : μμλ₯Ό ν
μ€νΈνλ ν¨μ. trueλ₯Ό λ°ν νλ©΄ ν΄λΉ μμμ μΈλ±μ€λ₯Ό λ°νelement : λ°°μ΄μ κ° μμindex : νμ¬ μμμ μΈλ±μ€array : λ©μλλ₯Ό νΈμΆν λ°°μ΄thisArg (μ ν) : μ½λ°± ν¨μμμ thisλ‘ μ¬μ©ν κ°