Hooks
React 함수형 컴포넌트에서 상태(state)와 생명주기를 사용할 수 있게 해주는 기능
useState Hook
상태(state)를 함수형 컴포넌트에서 관리할 수 있게 해준다.
일반적으로 배열의 형태로 반환되며, 첫번째 값이 상태 값, 두번째 값이 상태값을 업데이트 해주는 함수를 의미한다.
import React, {useState} from 'react';
function Example() {
const [num(변수), setNum(함수)] = useState(1);
const Click = () => {
setNum(num+1);
};
return (
<p>값 : {num}</p>
<buttonn onClick={Click}>증가</button>
);
}
useEffect Hook
생명주기 메서드(componentDidMount, componentDidUpdate, componentWillUnmount)와 비슷한 역할을 한다.
특정 작업, 상태 변화를 진행함에 있어 부작용(side effect)을 처리하는 데 사용한다.
side effect는 데이터 가져오기, 수동적인 DOM 조작 등과 같이 다른 컴포넌트에 영향을 줄 수 있는 작업들을 의미한다.
import React, {useState, useEffect} from 'react';
function Example() {
const[num, setNum] = useState(1);
useEffect(() => {
document.title = '값: ${num}'; // <- side effect
return () => { // <- cleanup
document.title = 'React App'
};
}, [num]);
// 첫번째 인자는 side effect를 수행하는 함수
// 첫번째 인자는 함수 내부에서 문서 제목을 변경한다.
// 두번째 인자는 dependency array
// 두번째 인자는 배열이 변할 때, 첫번째로 전달된 side effect 함수가 실행된다.
// cleanup function (반환하는 함수)
// 컴포넌트 unmount시 dependency가 변경되기 전에 여기서 필요한 작업을 할 수 있다.
return (
<p>값 : {num}</p>
<buttonn onClick={() => setNum(counnt+1)}>증가</button>
);
}
useContext Hook
Context API를 함수형 컴포넌트에서 사용할 수 있도록 도와준다.
전역적인 상태를 관리하거나 깊은 중첩에 걸친 컴포넌트들에게 props를 전달하는 것을 피하기 위해 사용된다.
useContext Hook을 사용하면 context 객체를 인자로 받아 해당 context의 값을 반환한다.
이 값은 context Provider 컴포넌트에서 제공되며, Provider가 없다면 context 객체 생성 시 전달된 기본값이 된다.
import React, {useContext} from 'react';
const MyContext = React.createContext();
function MyComponent() {
const value = useContext(MyContext);
return <p>{value}</p>
}
function Example() {
return (
<MyContext.Provider value= "Hello">
<MyComponent/>
</MyContext.Provider>
)
}
Provider
Context API에서 중요한 역할을 하는 컴포넌트
Provider는 context를 새엉할 때 반환된느 컴포넌트로, 그 자식 컴포넌트들에게 context 값을 제공한다.
useReducer Hook
복잡한 상태 로직을 다루기 위해 사용된다.
useState보다 더 강력한 방식으로 작동하며 액션(action)과 리듀서(reducer) 패턴을 사용한다.
현재 상태와 함수를 쌍으로 제공한다.
함수는 action을 인자로 받아 reducer한테 전달하고, reducer는 현재 상태와 action을 기반으로 새로운 상태를 생성한다.
import React, {useReducer} from 'react';
const reducer = (state, action) => {
switch (action.type) {
case 'increment':
return {count:state.count};
case 'decrement':
return {count:state.count};
default:
return {count:state.count};
}
}
function Example() {
const [state, dispatch] = useReducer(reducer, {count: 0});
return (
<>
<p>Count: {state.count}</p>
<button onClick={() => dispatch({type: 'increment'})}>+</button>
<button onClick={() => dispatch({type: 'decrement'})}>-</button>
</>
);
}
'Frontend > React' 카테고리의 다른 글
라우터 - 중첩 라우팅 outlet (0) | 2023.12.05 |
---|