안녕하세요! 효그니에요! 와! 리액트! 엄청 빨리 다시돌아왔다!
이번 글에서 설명할 것은 React Component의 state입니다.
State란?
Component가 갖는 유동적인 데이터를 의미합니다.
Class Component
카운터를 하나 만들어보겠습니다!
class Counter extends React.Component {
constructor(props) {
super(props); // React.Component의 생성자 메소드입니다.
this.state = { // this.state로 state를 설정합니다.
number: 0, // number 초기 값 설정
};
this.handleCounter = this.handleCounter.bind(this); // 함수 바인딩
}
handleCounter(e) { // 카운터 동작 함수를 구현합니다.
this.setState({ number: this.state.number + 1 }); // this.state로 state를 변경합니다.
}
render() {
return (
<div>
<h2>{this.state.number}</h2> {/* {변수} 를 통해 값을 표현할 수 있습니다. */}
<button onClick={this.handleCounter}>카운트</button>
{/* onClick 메소드를 사용하여, 버튼의 동작을 설정할 수 있습니다. */}
</div>
);
}
}
동작의 순서를 표현하면,
버튼 누르기 → onClick 메소드 실행 → onClick 메소드 내의 handleCounter 실행 → handleCounter 의 this.setState 실행 → state 변경 → reRender ( 숫자 바뀌는 것 )
이 되겠네요.
Functional Component
hooks Api 의 useState를 사용합니다.
import React, { useState } from 'react';
const Counter = () => {
const [number, setNumber] = useState(0); // useState로 state & state를 변경하는 함수 선언
return (
<div>
<h2>{number}</h2> {/* 카운트 나타내기 */}
<button onClick={() => setNumber((number) => number + 1)}>카운트</button>
{/* 선언했던 setNumber를 사용하여 값 증가 */}
</div>
);
};
onClick 메소드에는 동작할 함수가 들어갑니다. 야! 온클릭! 넣을게~!
const Counter = () => {
const [number, setNumber] = useState(0); // useState로 state & state를 변경하는 함수 선언
function handleCounter(e) {
setNumber((number) => number + 1);
}
return (
<div>
<h2>{number}</h2> {/* 카운트 나타내기 */}
<button onClick={handleCounter}>카운트</button>
{/* 선언했던 setNumber를 사용하여 값 증가 */}
</div>
);
};
간단하게 풀어쓰면 이렇게 되겠네요.
클래스형 컴포넌트의 state와 다른 점이라면, useState를 사용하여 state를 this.state처럼 묶지 않고 개별적으로 갖고 있을 수 있다는 점이겠군요.
이상으로 state에 대한 글을 마치겠습니다!
추운 날씨 조심들 하시고! 따닷하게 다니세요!
'JavaScript > React.js Lecture' 카테고리의 다른 글
6. React View, Component 반복, 조건부 랜더링 (0) | 2020.11.19 |
---|---|
5. React Router (0) | 2020.11.19 |
4. React 생명주기 (0) | 2020.11.16 |
2. React Component (props, state, Class Component, Functional Component) (0) | 2020.11.15 |
1. React란? 그리고 CRA 설정 (0) | 2020.11.15 |