State
란 컴포넌트 내부에서 가지고 있는 컴포넌트의 상태값을 의미합니다.posts='변수명'
이런 식으로 변수에 데이터를 저장했었는데, 리액트에서는 변수 말고 state를 만들어서 데이터를 저장해둘 수 있습니다.import React, { useState } from 'react';
const Main = () => {
// 변수 color, setColor는 다름 이름으로 바뀔 수 있습니다.
const [color, setColor] = useState('red');
return (
<h1>여기는 메인페이지입니다.</h1>
);
};
export default Main;
먼저, state를 사용하기 위해서는 맨 윗 줄에 import { useState } form 'react' 를 해주어야 합니다. useState 함수는 Hook의 일종으로 내장되어 있는 react로부터 가져올 수 있습니다.
원하는 곳에서 useState('보관할 자료')
를 쓰면 state에 자료를 잠깐 저장할 수 있습니다. 그리고 저장한 자료를 나중에 쓰고 싶으면 let [a, b] = useState('남자코트추천')
a자리에 state 이름을 자유롭게 작명한 다음 나중에 자유롭게 사용할 수 있습니다.
그렇다면 useState hook의 호출 결과로 반환되는 배열의 요소는 각각 무엇인지 알아봅시다.
1. 첫 번째 요소(state) : 우리가 동적으로 관리하고자 하는 상태값. 해당 상태의 초기값은 useState hook을 호출할 때 인자(defaultValue)로 넘겨줍니다.
2. 두 번째 요소(setState function) : 첫 번째 요소인 상태값을 업데이트 하는 함수입니다. state를 초기값에서 다른 값으로 변경하고 싶다면 setState를 통해서 변경해주면 됩니다.
color
는 useState hook에 넘겨준 인자 'red'가 담겨있습니다. setcolor
는 선언된 state, 즉 color
의 값을 변경할 때 사용하는 함수입니다. color의 값을 변경할 때 단순히 다른 값을 할당하는 것이 아니라 useState 함수로부터 반환된 두 번째 요소인 setColor를 사용해야 합니다.변수말고 state에 저장해서 쓰는 이유는 뭘까요?
- state는 변동사항이 생기면 state를 쓰는 html도 자동으로 재랜더링 해줍니다.
- React는 구독을 하고 있는 값이 변경이되면 재랜더링을 하는데, 변수를 사용하면 React에서 변경여부를 알 수가 없어서 rerender를 하지 않고, state를 쓰면 변경여부를 알 수 있기 때문에 rerender를 수행합니다.
import React, { useState } from 'react';
const Main = () => {
const [color, setColor] = useState('red'); // 4 ~ 5
return (
<h1 style={{backgroundColor : color}}>여기는 메인페이지입니다.</h1> // 1 ~ 3
);
};
export default Main;
<h1 style={}>
<h1 style={backgroundColor : ""}>
backgroundColor : color
와 같이 미리 선언한 state 값을 넣어줍니다.red
에 따라 h1 태그의 첫 배경색을 빨간색으로 변합니다.useState('blue')
로 초기값을 변경하면 화면에 그려지는 배경색 또한 파란색으로 나타납니다.
import React, { useState } from 'react';
const Main = () => {
const [color, setColor] = useState('red');
return (
<>
<h1 style={{backgroundColor : color}}>여기는 메인페이지입니다.</h1>
<button onClick={() => setColor('blue')}>색상 바꾸기</button>
</>
);
};
export default Main;
- 클릭 시 뭔가를 실행하고 싶을 때는 onClick={함수} 같이 이벤트 핸들러를 달아서 사용합니다.
- state를 변경하려면 꼭 state 변경함수를 꼭 이용해야 합니다. state 변경함수는
( )
안에 입력한 것으로 기존 입력했었던 state를 갈아치워 줍니다.