react
에서는 react hooks
라는 기능들이 있습니다. 예를 들어 우리는 state
를 사용하기 위해서 class
기반의 컴포넌트를 제작해왔지만 useState
라는 react hooks
를 이용하여 function
기반의 컴포넌트에서 state
를 사용할 수 있습니다.
useState
는 함수형 컴포넌트에서 state
를 사용할 수 있도록 해줍니다.
import React, { Fragment, useState } from 'react';
function Example()
{
const [count, setCount] = useState(0);
}
useState
는 state변수, 해당 변수를 갱신할 수 있는 함수 이 두가지를 반환합니다. 위 코드에서 count
는 변수, setCount
는 변수를 갱신하는 함수입니다. useState
에는 인자값을 넘겨줄 수 있습니다. 여기서 넘겨준 인자가 state변수의 초기값으로 설정됩니다. 위 코드에서는 count
의 기본값이 0
으로 설정되어 있습니다.
이 useState
를 이용하여 Counter
를 만들어 보겠습니다.
import React, { Fragment, useState } from 'react';
import styled from 'styled-components';
const Container = styled.div`
width: 100%;
height: 200px;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
`;
const CountText = styled.span`
font-size: 24px;
`;
const ButtonContainer = styled.div`
display: flex;
align-items: center;
justify-content: center;
margin-top: 20px;
`;
const ClickButton = styled.button`
width: 200px;
height: 50px;
background-color: #f8585b;
border: none;
color: white;
font-size: 24px;
margin: 0 20px;
border-radius: 10px;
cursor: pointer;
transition: 0.3s ease-in;
&:hover {
background-color: #d12124;
}
`;
export default function Counter(props) {
const [count, setCount] = useState(0);
// Functions
const increment = () => {
setCount(count + 1);
};
const decrement = () => {
setCount(count - 1);
};
return (
<Fragment>
<Container>
<CountText>{count}</CountText>
<ButtonContainer>
<ClickButton onClick={increment}>+</ClickButton>
<ClickButton onClick={decrement}>-</ClickButton>
</ButtonContainer>
</Container>
</Fragment>
);
}
완성된 코드입니다. 디자인은 styled-component
를 이용했습니다. 디자인을 제외한 기능적인 부분의 코드만 보도록 하겠습니다.
const [count, setCount] = useState(0);
// Functions
const increment = () => {
setCount(count + 1);
};
const decrement = () => {
setCount(count - 1);
};
count
변수와 setCount
함수를 useState
를 이용하여 선언해줌과 동시에 변수의 기본값을 0
으로 설정했습니다.
그리고 두 가지의 함수를 만들어 주었습니다. 버튼 클릭시 count
의 값을 +- 1씩 해주기 위하여increment
와 decrement
두 함수를 선언했습니다.
return (
<Fragment>
<Container>
<CountText>{count}</CountText>
<ButtonContainer>
<ClickButton onClick={increment}>+</ClickButton>
<ClickButton onClick={decrement}>-</ClickButton>
</ButtonContainer>
</Container>
</Fragment>
);
다음으로 두 버튼의 onClick
으로 위에서 만든 함수를 연결시켜주었습니다. 그리고 count
를 출력시키도록 하였습니다. 여기서 주의해서 볼 부분은 class
컴포넌트에서는 this.state.count
혹은 const [count] = this.state;
와 같이 비구조화 할당을 해서 사용했지만 함수형 컴포넌트이기 때문에 사용하지 않아도 되는 편리한 점이 있습니다.
완성한 코드를 실행시키면 아래와 같이 버튼 2개와 count
가 보이며 버튼 클릭시 count
의 값이 변경되는 모습을 확인할 수 있습니다.