μ‹œνλ¦¬ν‹°μ§€ν˜Έ 2023. 12. 19. 20:20

1. ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ™€ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈ

 

κ³Όκ±°μ—λŠ” λŒ€λΆ€λΆ„μ˜ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ•„λž˜μ™€ 같이 클래슀 문법을 ν™œμš©ν•˜μ—¬ μž‘μ„±ν•˜μ˜€μœΌλ‚˜, μ½”λ“œκ°€ λ‹€μ†Œ κΈΈμ–΄μ§€κ³  λ³΅μž‘ν•΄μ§€λŠ” 것을 쀄이기 μœ„ν•΄ μ΅œκ·Όμ—λŠ” ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈλ‘œ μž‘μ„±ν•˜λŠ” 방식을 μ„ ν˜Έν•˜κ³  μžˆλ‹€.

 

class λ°©μ‹μœΌλ‘œ μž‘μ„±λœ  Counter μ»΄ν¬λ„ŒνŠΈ

const { useState, memo, Component } = React;

class Counter extends Component {
	constructor(props) {
		super(props);
		// 초기 μƒνƒœ μ„€μ •
		this.state = {
			count: 0
		};
	}

	// μΉ΄μš΄ν„° 증가 ν•¨μˆ˜
	increment = () => {
		this.setState(prevState => ({
			count: prevState.count + 1
		}));
	};

	// μΉ΄μš΄ν„° κ°μ†Œ ν•¨μˆ˜
	decrement = () => {
		this.setState(prevState => ({
			count: prevState.count - 1
		}));
	};
	render() {
		return (
			<div>
				<h1>{this.state.count}</h1>
				<button onClick={this.increment}>Increase</button>
				<button onClick={this.decrement}>Decrease</button>
			</div>
		);
	}
}

 

 

ν•¨μˆ˜ν˜• λ°©μ‹œμœΌλ‘œ μž‘μ„±λœ Counter μ»΄ν¬λ„ŒνŠΈ

const { useState } = React;
	
	const Counter = () => {
		const [count, setCount] = useState(0);
		const clickHandler = () => count += 1;
		return (
			<div>
				<p>{count}</p>
				<button onClick={clickHandler}>Click me</button>
			</div>
		)
	}
	const root = ReactDOM.createRoot(document.getElementById('root'));
	root.render(<Counter />);

 

 

2. React Hooks

 

ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œλ§Œ μ‚¬μš©μ΄ κ°€λŠ₯ν–ˆλ˜ μƒνƒœ(state) λ₯Ό κ΄€λ¦¬ν•˜κ±°λ‚˜ Ref 등을 ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œλ„ μ‚¬μš©ν•  수 μžˆλ„λ‘ λ“±μž₯ν•œ ν•¨μˆ˜λ‘œ, Reactμ—μ„œ μ œκ³΅ν•˜λŠ” λ‚΄μž₯ ν•¨μˆ˜λΌκ³  λ³Ό 수 μžˆλ‹€.

 

μ΄λŸ¬ν•œ Hook은 ν΄λž˜μŠ€μ—μ„œ μ œκ³΅λ˜λŠ” κΈ°λŠ₯을 κ°€μ Έμ™€μ„œ (hooking) μ‚¬μš©ν•œλ‹€λŠ” 의미둜 λ„€μ΄λ°λœλ‹€.

function add(a, b) {
	useEffect(() => {...}, []); // x
}

 

 

*hook의 μ’…λ₯˜

useState

useEffect

useReducer

 

이 셋을 μ‚¬μš©ν•  λ•Œ λ Œλ”λ§μ΄ λ‹€μ‹œ λœλ‹€.