study_IT/기타
React 의 State 개념 및 사용법
맛집줘
2023. 9. 26. 10:04
728x90
반응형
React의 `useState` 훅을 사용하면 컴포넌트 내에서 상태(state)를 관리할 수 있습니다. 상태는 컴포넌트 내부의 데이터를 저장하고 변경할 때 사용됩니다.
참고) React에서 훅(Hook)은 함수형 컴포넌트에서 상태(state)와 생명주기(lifecycle) 기능을 클래스 컴포넌트와 유사하게
사용할 수 있게 도와주는 기능입니다. React 16.8 버전부터 도입되었으며, 함수형 컴포넌트에서 상태 관리와 다양한 리액트
기능을 사용할 수 있게 해주는 중요한 개념입니다.
1. useState
`useState` 훅은 함수형 컴포넌트에서 상태를 추가하고 관리하는데 사용됩니다. 이를 통해 컴포넌트의 상태를 변경하고 UI를
업데이트할 수 있습니다.
2. useEffect
`useEffect` 훅은 부수 효과(side effect)를 처리하는데 사용됩니다. 이벤트 리스너 등과 같은 부수 효과를 관리하고,
컴포넌트의 생명주기와 관련된 작업을 수행할 수 있습니다.
3. useContext
`useContext` 훅은 React 컨텍스트(Context)를 사용하여 컴포넌트 간에 데이터를 공유할 때 유용합니다.
4. useReducer
`useReducer` 훅은 Redux와 유사한 방식으로 상태 관리를 할 수 있게 해줍니다. 복잡한 상태 로직을
다룰 때 유용합니다.
5. Custom Hooks
개발자가 직접 만든 커스텀 훅을 만들어 로직을 추상화하고 재사용할 수 있게 합니다.
훅은 클래스 컴포넌트의 한계를 극복하고 함수형 컴포넌트로 더 많은 로직을 옮길 수 있게 해주어
컴포넌트를 더 단순하게 만들고 코드의 재사용성을 높입니다. 함수형 컴포넌트와 훅을 사용하면 클래스
컴포넌트 없이도 강력한 React 컴포넌트를 만들 수 있습니다.
아래의 코드 예제를 통해 React에서 `useState`를 사용하여 상태를 다루는 방법을 설명하겠습니다.
import React, { useState } from 'react';
function Article(props) {
return (
<article>
<h2>{props.title}</h2>
{props.body}
</article>
);
}
function Header(props) {
return (
<header>
<h1>
<a href="/" onClick={(event) => {
event.preventDefault();
props.onChangeMode();
}}>{props.title}</a>
</h1>
</header>
);
}
function Nav(props) {
const lis = [];
for (let i = 0; i < props.topics.length; i++) {
let t = props.topics[i];
lis.push(
<li key={t.id}>
<a
id={t.id}
href={'/read/' + t.id}
onClick={(event) => {
event.preventDefault();
props.onChangeMode(Number(event.target.id));
}}
>
{t.title}
</a>
</li>
);
}
return (
<nav>
<ol>{lis}</ol>
</nav>
);
}
function App() {
const [mode, setMode] = useState('WELCOME');
const [id, setId] = useState(null);
const topics = [
{ id: 1, title: 'html', body: 'html is ...' },
{ id: 2, title: 'css', body: 'css is ...' },
{ id: 3, title: 'javascript', body: 'javascript is ...' }
];
let content = null;
if (mode === 'WELCOME') {
content = <Article title="Welcome" body="Hello, WEB"></Article>;
} else if (mode === 'READ') {
let title, body = null;
for (let i = 0; i < topics.length; i++) {
if (topics[i].id === id) {
title = topics[i].title;
body = topics[i].body;
}
}
content = <Article title={title} body={body}></Article>;
}
return (
<div>
<Header title="WEB" onChangeMode={() => {
setMode('WELCOME');
}}></Header>
<Nav topics={topics} onChangeMode={(_id) => {
setMode('READ');
setId(_id);
}}></Nav>
{content}
</div>
);
}
export default App;
위의 코드에서 주요 포인트는 다음과 같습니다:
1. `useState` 훅을 사용하여 상태를 정의합니다. 예를 들어,
`const [mode, setMode] = useState('WELCOME');`와 같이 상태 변수 `mode`와 그 상태를 변경할 수 있는 함수 `setMode`를 정의합니다.
2. 각각의 상태 변수에 초기값을 설정할 수 있습니다. 초기값은 `useState` 함수의 인자로 전달됩니다.
3. 상태를 변경할 때는 `setMode`와 `setId`와 같은 상태 변경 함수를 사용합니다.
예를 들어, `setMode('WELCOME')`와 같이 호출하면 `mode` 상태가 변경됩니다.
4. 상태에 따라 UI를 다르게 렌더링할 수 있습니다. `mode` 상태에 따라 다른 컴포넌트를 렌더링하도록 조건문을 사용합니다.
React의 상태 관리 기능을 활용하면 컴포넌트의 동적인 상태를 관리하고 상태가 변경될 때 UI를 업데이트할 수 있습니다.
728x90
반응형