home
자바
home
🥎

#3 STATE

#3.0 Understanding State (13:34)

<!DOCTYPE html> <html> <body> <div id="root"></div> </body> <script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script> <script src="https://unpkg.com/react-dom@17.0.2/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(); // counter에 1을 더하고 다시 렌더링 해줌. // 이곳에서 호출하지 않는다면, 페이지가 새로고침 되지 않는 문제 발생 } function render() { ReactDOM.render(<Container />, root); } function Container() { return ( <div> <h3>Total clicks: {counter}</h3> <button onClick={countUp}>Click me</button> </div> ) } // 페이지가 로딩될 때 처음 Container를 렌더링 render(); </script> </html>
JavaScript
복사
변수를 연결할 땐 중괄호 사용 {}
React.js는 리렌더링 시, UI에서 오로지 바뀐 부분만 업데이트 해준다! ex) Contaioner를 리렌더링 했으나 Container를 다시 렌더링 하는 것이 아닌 그 안의 변경된 counter 변수만 업데이트 됨
UI가 변경되는 함수에 Container를 리렌더링 ⇒ 하지만 이 방식은 데이터가 변경될 때마다 렌더링을 잊으면 안되기 때문에 좋은 방법은 아님!

#3.1 setState part One (11:53)

React.useState()
초기값과 데이터의 값을 바꿀수 있는 함수가 들어있는 배열 형식으로 반환 ⇒ [초기값, 함수]
<script type="text/babel"> const root = document.getElementById("root"); function App() { const [counter, modifier] = React.useState(66); return ( <div> <h3>Total clicks: {counter}</h3> <button>Click me</button> </div> ) } ReactDOM.render(<App />, root); </script>
JavaScript
복사
배열 각각의 값을 쉽게 변수에 담는 방법
const x = [a, b, c]; const var1 = x[0]; const var2 = x[1]; // 이렇게 일일이 담는 방법 보다는, // 이게 쉽다. const x = [a, b, c]; const [var1, var2, var3] = x;
JavaScript
복사

#3.2 setState part Two (07:22)

React가 제공하는 useState가 리턴해주는 함수를 실행하면, 값을 바꿔준 후 자동으로 리렌더링 시켜준다.
<script type="text/babel"> const root = document.getElementById("root"); 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>
JavaScript
복사
1.
데이터와 데이터를 바꿔주는 함수(f)를 변수에 담는다. (counter, setCounter)
2.
return은 사용자가 보게될 컴포넌트이고, return()에 데이터를 담는다.
3.
버튼이 클릭되면 setCounter(counter + 1)를 호출한다. f(변경 데이터)
4.
데이터가 변경되고 리렌더링 된다.

#3.3 Recap (05:19)

리액트의 룰에 맞춰 데이터를 변경했을 때 어떻게 refresh 되는가? ⇒ 변경된 데이터만 리렌더링(핵심!!!) 리액트는 겁나 똑똑하다.
즉, 위의 코드에서 setCounter 함수를 통해 state를 변경했을 때 컴포넌트는 새로운 값을 가지고 다시 한 번 렌더링 되었다.

#3.4 State Functions (05:52)