3.1 setState part One

2022. 9. 7. 15:57React/ReactJS로 영화 웹 서비스 만들기

<!DOCTYPE html>
<html lang="en">

<body>
    <div id="root"></div>
</body>
<script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
    const root = document.getElementById("root");
    let counter = 0;
    function countUp() {
        counter = counter + 1;
        render();
    }
    function render() {
        ReactDOM.render(<App />, root);
    }
    function App() {
        return (
            <div>
                <h3>Total clicks: {counter}</h3>
                <button onClick={countUp}>Click me</button>
            </div>
        );
    }
    render();
</script>

</html>

 

먼저 counter가 0인 시점에서 최초로 아래를 렌더링 할 것이다.

    function App() {
        return (
            <div>
                <h3>Total clicks: {counter}</h3>
                <button onClick={countUp}>Click me</button>
            </div>
        );
    }
    render();

그러고 나서 counter 값을 증가시킬 때 리렌더링하려고 한다.

    function countUp() {
        counter = counter + 1;
        render();
    }
    function render() {
        ReactDOM.render(<App />, root);
    }

 

하지만 이 방법은 좋은 방법이 아니다.

 

 

 

 

그래서 이번에는 새롭게 좋은 방법으로 한번 시도해보자.

 

React.js 내에서 데이터를 보관하고 자동으로 리렌더링을 일으킬 수 있는 최고의 방법을 배워보자.

 

먼저, 어디에 데이터를 담으면 되는지 알아보자.

아까는 let counter로 데이터를 담았지만

이번에는 useState를 이용하여 담으면 된다. 

const data = React.useState();

그러면 아래와 같이 데이터를 담을 수 있다.

 

다음과 같이 초기값을 줄 수도있다.

const data = React.useState(0);

그래서, count변수와 countUp함수를 사용한 것보다 훨 편해졌음을 인지할 수 있다.

 

다음과 같이 코드를 구성하면 다음과 같이 초기값 처리가 잘 되는 것을 확인할 수 있다.

 

const [counter, modifier] = React.useState(0);

의 첫번째요소는 초기값, 두번째는 그 값을 바꾸는 함수라고 생각하면 된다.

'React > ReactJS로 영화 웹 서비스 만들기' 카테고리의 다른 글

3.3 Recap  (0) 2022.09.07
3.2 setState part Two  (0) 2022.09.07
3.0 Understanding State  (0) 2022.09.06
2.6 JSX part Two  (0) 2022.09.05
2.5 JSX  (0) 2022.09.05