ν΄λμ€ν vs ν¨μν
Reactλ μ²μμ ν΄λμ€ν μ»΄ν¬λνΈμ λ°©λ²λ§ μ‘΄μ¬νλ€.
νμ§λ§, ν΄λμ€νμ μ΄λ ΅κ³ 볡μ‘νμ¬ ν¨μν μ»΄ν¬λνΈ λ°©λ²μ΄ μ겨λκ² λμλ€.
ν¨μν μ»΄ν¬λνΈλ ν΄λμ€ν μ»΄ν¬λνΈλ³΄λ€ ν¨μ¬ κ°λ¨νκΈ°μ μ μ ν¨μν μ»΄ν¬λνΈμ μ¬μ© λΉμ¨μ΄ λμμ§κ² λμκ³ , μμ¦ νμ μμλ ν΄λμ€ν보λ€λ ν¨μν μ»΄ν¬λνΈλ₯Ό λ§μ΄ μ¬μ©νλ μΆμΈλΌκ³ νλ€.
ν΄λμ€ν μ»΄ν¬λνΈ
import { Component } from 'react';
class Hello extends Component {
render() {
return <div>ν΄λμ€ν μ»΄ν¬λνΈ</div>
}
}
export default Hello
ν¨μν μ»΄ν¬λνΈ
const Hello = () => <div>ν¨μν μ»΄ν¬λνΈ</div>
export default Hello
μ΄ ν¨μν μ»΄ν¬λνΈλ νμ΄ν ν¨μλ‘λ μ μ©μ΄ κ°λ₯ν©λλ€.
function Hello() {
return <div>ν¨μν μ»΄ν¬λνΈ</div>
}
export default Hello
κ·Έλμ μ΄κ² React-Hooksμ λ¬΄μ¨ μκ΄μΈλ°?
ν¨μν μ»΄ν¬λνΈλ μ¬μ©μ΄ κ°νΈν λμ , κ·Έ μ체λ§μΌλ‘λ ν΄λμ€ν μ»΄ν¬λνΈμ λͺ¨λ κΈ°λ₯μ νμ©ν μ μλ€.
κ·Έλμ Reactμμ ν¨μν μ»΄ν¬λνΈμμλ ν΄λμ€ν μ»΄ν¬λνΈμ κΈ°λ₯μ λμΌνκ² μ¬μ©ν μ μλλ‘ λꡬλ₯Ό λ§λ€μ΄ μ£Όμλλ° μ΄λ₯Ό Hooks(ν ) μ΄λΌ λΆλ₯Έλ€. μ΄λ ν¨μν μ»΄ν¬λνΈμ λ§κ² λ§λ€μ΄μ§ κ²μΌλ‘ ν¨μν μ»΄ν¬λνΈμμλ§ μ¬μ©μ΄ κ°λ₯νλ€.
Hookμ κ·μΉ
1. μ΅μμ(at the Top Level)μμλ§ Hookμ νΈμΆν΄μ νλ€.
λ°λ³΅λ¬Έ, 쑰건문 νΉμ μ€μ²©λ ν¨μ λ΄μμ Hookμ νΈμΆνλ©΄ μλκ³ νμ React ν¨μμ μ΅μλ¨μμ νΈμΆν΄μΌ νλ€.
μ΄ κ·μΉμ μ§ν€λ©΄ μ»΄ν¬λνΈκ° λ λλ§ λ λλ§λ€ νμ λμΌν μμλ‘ Hookμ΄ νΈμΆλλ κ²μ΄ 보μ₯λλ€.
2. μ€μ§ React ν¨μ λ΄μμ Hookμ νΈμΆν΄μΌ νλ€.
Hookμ μΌλ°μ μΈ JavaScript ν¨μμμ νΈμΆνλ©΄ μλλ€.
λμ React ν¨μ μ»΄ν¬λνΈμμλ Custom Hookμμλ Hookμ νΈμΆν μ μλ€.
μ΄ κ·μΉμ μ§ν€λ©΄ μ»΄ν¬λνΈμ λͺ¨λ μν κ΄λ ¨ λ‘μ§μ μμ€μ½λμμ λͺ νν νμΈν μκ° μλ€.
useState, useEffect
λνμ μΈ React-Hooksλ‘λ useStateμ useEffectλ₯Ό λ€ μκ° μλ€.
useStateλ μνλ₯Ό κ΄λ¦¬νλ Hookμ΄λ€.
import { useState } from 'react';
function MyComponent() {
const [age, setAge] = useState(28);
const [name, setName] = useState('Taylor');
const [todos, setTodos] = useState(() => createTodos());
// ...
μμμ κ°μ΄ μ»΄ν¬λνΈμ μ΅μλ¨μμ useStateλ₯Ό νΈμΆνμ¬ state λ³μλ₯Ό μ μΈνλ€.
νμ¬ μνλ₯Ό λνλ΄λ state κ°κ³Ό μ΄ μνλ₯Ό λ³κ²½νλ setState κ°μ ν μμΌλ‘ μ 곡νλ€.
stateλ μ΄κΈ°κ°μ μ€μ ν μ μκ³ setState ν¨μλ₯Ό μ¬μ©νμ¬ μ΄ κ°μ λ³κ²½ν μκ° μλ€.
useEffectλ κΈ°μ‘΄ ν΄λμ€ν μ»΄ν¬λνΈμμ μ¬μ©νλ componentDidMount, componentDidUpdate, componentWillUnmountλ₯Ό νλμ APIλ‘ ν΅ν©ν κ²κ³Ό κ°λ€. μ΄ λ§μ΄ 무μμ΄λλ©΄, React μ»΄ν¬λνΈκ° λ λλ§λ λλ§λ€ νΉμ μμ μ μ€νν μ μλλ‘ νλ Hookμ΄λΌλ μλ―Έμ΄λ€.
useEffect κΈ°λ³Έ νν:
useEffect(function, deps)
function: μννκ³ μ νλ μμ
deps: λ°°μ΄ ννμ΄λ©°, λ°°μ΄μλ κ²μ¬νκ³ μ νλ νΉμ κ°μ΄λ λΉ λ°°μ΄μ΄ λ€μ΄κ°λ€.
import { useEffect } from 'react';
const Hello = () => {
useEffect(() => {
console.log('λ§μ΄νΈλ λλ§ μ€ν!');
}, []);
}
export default Hello
depsμ λΉ λ°°μ΄μ΄ λ€μ΄κ°λ©΄ μ²μ λ λλ§ λ λλ§ μ€νλκ³ μ΄νμλ μ€νλμ§ μλλ€.
λ§μ½ λ°°μ΄μ μλ΅νλ€λ©΄ 리λ λλ§λ λλ§λ€ μ€νλλ€.
λ§μΌ νΉμ κ°μ΄ update λ λλ§λ€ μ€ννκ³ μΆμ μμ μ΄ μλ€λ©΄ μλμ κ°μ΄ μμ±ν΄μ£Όλ©΄ λλ€.
μλ₯Ό λ€μ΄, ageλΌλ state κ°μ΄ λ°λ λλ§λ€ μ€νλκ² νκ³ μΆλ€λ©΄
import { useState, useEffect } from 'react';
const Hello = () => {
const [age, setAge] = useState(20)
useEffect(() => {
console.log('λ§μ΄νΈλ λλ§ μ€ν!');
}, [age]);
}
export default Hello
[μ°Έκ³ ]
React 곡μ λ¬Έμ
'"곡λΆ" ππππππ > πΉππππ‘πππ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[TIL] Babelμ΄λ 무μμΈκ°? (4) | 2023.06.15 |
---|---|
[TIL] CSS / Sass / SCSS μ°¨μ΄μ μμ보기 (0) | 2023.06.03 |
[TIL] REST-APIμ GraphQL-APIμ μ°¨μ΄μ (0) | 2023.02.28 |
UIμ UXλ? κ·Έλ¦¬κ³ UIμ UXμ κ΄κ³ (0) | 2022.06.27 |
Github Pages λ°°ν¬ μ favicon μ μ© μλλ μ΄μ (0) | 2022.04.12 |
λκΈ