React : useState로 component re-rendering
- 위와 같이 클릭버튼을 누르면 카운팅되는 페이지가 있다.
VanillaJS
리액트를 사용하지 않고 바닐라JS로 구현을 한다 하고 아래 처럼 구현했다고 하자.
<script>
let counter = 0;
const button = document.getElementById("btn");
const span = document.querySelector("span");
function handleClick() {
counter++;
span.innerText = `Total clicks: ${counter}`;
}
button.addEventListener("click", handleClick);
</script>
위 처럼 작성하게 되면 counter가 변경될 때마다 span 태그 부분 전체가 매번 다시 호출되어 적용된다. 물론 이를 방지해서 코드를 짤 수 있지만 일단 그런 특징을 가지고 있다.
React
React를 사용하면 마지막에 변경된 부분만을 감지(?)해서 그 컴포넌트만 업데이트한다.
non state
<script type="text/babel">
let counter = 0;
function countUp() {
counter += 1;
render();
}
const Container = () => (
<div>
<h3>Total clicks: {counter}</h3>
<button onClick={countUp}>Click me</button>
</div>
);
function render() {
ReactDOM.render(<Container />, root);
}
render();
</script>
ReactDOM.render(<Container />, root);
-
그런데 이런 식으로 버튼을 클릭할 때 마다 DOM을 매번 호출하는 방식은 좋지 않고 state를 사용하면 이를 해결할 수 있다.
-
state는 컴포넌트 내부에서 선언해 내부에서 수정 및 작업이 가능한 동적 데이터 형태이다.
useState
<script type="text/babel">
function App() {
const [counter, setCounter] = React.useState(0);
const onClick = () => {
setCounter(counter + 1);
};
return (
<div>
<h3>Total clicks: {counter}</h3>
<button onClick={onClick}>Click me</button>
</div>
);
}
ReactDOM.render(<App />, root);
</script>
다양한 방법이 있겠지만 React Hook의 userState를 이용하여 구현할 수 있다. useState는 현재의 state 값과 이 값을 업데이트하는 함수를 쌍으로 제공하는데 이를 통해 (counter + 1
) 더 효율적으로 짤 수 있다.
JS와 React의 차이?, props와 state, React Hook에 대해서 다시 제대로 다뤄야겠다.
Author And Source
이 문제에 관하여(React : useState로 component re-rendering), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@donsco/React-useState로-component-re-rendering저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)