home
자바
home
🛼

#2 THE BASICS OF REACT

#2.0 Introduction (04:05)

ReactJS가 해결해주는 문제를 이해하는 것부터 시작한다. ⇒ 이 기술은 왜 만들어졌는가 이해하기.
ReactJS는 웹사이트의 상호작용을 위해 생겼다. interactive 한 웹사이트를 만들기 위해서.
예를 들면, 자바스크립트에서 버튼과 텍스트가 상호작용 하는 웹페이지를 만들고 싶다. ⇒ 버튼에 클릭 이벤트를 붙이고, 클릭할 때마다 화면의 텍스트를 업데이트 하는 function을 실행해야 한다.
ReactJS는 버튼을 생성하고 클릭을 감지하는데 필요한 것이 무엇인지 알아서 이것에 대한 지름길을 만들어 놓은 것이다!!

#2.1 Before React (07:02)

원래 해오던 자바스크립트 방식에서 리액트로 바꿀 점을 찾아보자.
<!DOCTYPE html> <html> <body> <span>Total clicks: 0</span> <button id="btn">Click me</button> </body> <script> let counter = 0; const button = document.getElementById("btn"); const span = document.querySelector("span"); function handleClick() { counter = counter + 1; span.innerText = `Total clicks: ${counter}`; } button.addEventListener("click", handleClick); </script> </html>
HTML
복사
~~바닐라 자바스크립트 방식~~
1.
HTML을 그린다.
2.
자바스크립트에서 가져온다.
3.
이벤트를 감지한다.
4.
데이터를 업데이트 한다.
5.
HTML을 업데이트 한다.
이제 이 코드를 리액트로 작성해보자!!
리액트로 작성하기 전에 설치부터 해야겠죠?
<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>
JavaScript
복사
import 후
콘솔에서 React를 호출하면!
짜잔

#2.2 Our First React Element (10:31)

React JS의 규칙 중 하나는 HTML을 HTML 코드를 직접 작성하지 않는다는 것이다. 어떤 요소가 필요하다면 자바스크립트를 사용해서 만드는 것이다!
React는 interative한 UI를 만들기 위한 엔진과 같다.
react-dom은 React element를 HTML에 두는 역할을 한다.
<!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> const root = document.getElementById("root"); const span = React.createElement("span", { id:"sexy-span" }, "Hello, I'm a span"); ReactDOM.render(span, root); </script> </html>
HTML
복사
리액트로 span 요소를 그려보았다.
리액트는 우리가 기존에 해왔던 방식과 거꾸로 하고 있다. html을 먼저 그리고 요소를 찾아와 업데이트 했던 기존의 방식과는 달리 리액트는 업데이트 할 것을 html에 그려! 라고 하고 있다.
설명을 위해 실제로는 쓰지 않는 createElement를 사용했고 코드는 복잡하고 어렵지만 일단 이 원리를 이해하도록 하자.

#2.3 Events in React (08:01)

<!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> const root = document.getElementById("root"); const h3 = React.createElement("h3", { id: 'title', onMouseEnter: () => console.log('mouse enter'), }, "Hello, I'm a span"); const btn = React.createElement("button", { onClick: () => console.log('im click'), }, "Click me"); const container = React.createElement("div", null, [h3, btn]); ReactDOM.render(container, root); </script> </html>
JavaScript
복사
prop Object를 작성해 보았는데,
리액트는 이미 알고있다…
id는 html에 들어가야 하고 onMouseEnter는 이벤트라는 것을…(소름)

#2.4 Recap (05:47)

import
//엔진 <script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script> //ReactDOM => React Element들을 HTML로 바꿈 <script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js"></script>
JavaScript
복사
render는 어느 요소 안에 html 태그를 그릴 것인지 설정하는 것
createElement는 쓸 일 없음, 다른 방식 사용
prop object 작성 → 일부는 html로, 일부는 js 이벤트리스너로, …
데이터 업데이트는 아직 해보지 않았다. ⇒ 추후 강의에서 배움

#2.5 JSX (08:22)

JSX란? 자바스크립트를 확장한 문법. 실제로 많이 쓰이는 문법이고, HTML과 비슷해서 익숙하다는 장점이 있다.
기존에 작성했던 코드와 비교해보겠다.
기존코드
<!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> const root = document.getElementById("root"); const h3 = React.createElement("h3", { id: 'title', onMouseEnter: () => console.log('mouse enter'), }, "Hello, I'm a title"); const btn = React.createElement("button", { onClick: () => console.log('im click'), }, "Click me"); const container = React.createElement("div", null, [h3, btn]); ReactDOM.render(container, root); </script> </html>
JavaScript
복사
JSX 문법을 사용한 코드
<!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"); const Title = ( <h3 id="title" onMouseEnter={() => console.log("mouse enter")} > Hello, I'm a title </h3> ); const Button = ( <button style={{backgroundColor: "tomato",}} onClick={() => console.log("I'm Click")} > Click me </button> ) const container = React.createElement("div", null, [h3, btn]); ReactDOM.render(container, root); </script> </html>
JavaScript
복사
특징은?
개발자들이 어떤 코드인지 한 눈에 알 수 있다.
HTML 코드와 굉장히 비슷하다.
createElement는 여러 가지 것들을 기억해서 사용해야 하는 반면, JSX는 직관적으로 이해하기 쉽다.
브라우저에게 JSX로 적은 코드를 이해시키기 위해 “babel”을 설치해야 한다. (JSX 코드를 브라우저가 이해할 수 있는 형태로 변환시켜준다.)
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
JavaScript
복사
바벨에서 미리보기 가능
하지만 이 방식은 속도가 느리기 때문에 항상 쓰이는 방법은 아니다.

#2.6 JSX part Two (07:19)

<!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"); function Title() { return ( <h3 id="title" onMouseEnter={() => console.log("mouse enter")} > Hello, I'm a title </h3> ); }; function Button() { return ( <button style={{ backgroundColor: "tomato", }} onClick={() => console.log("I'm Click")} > Click me </button> ); }; const Container = () => ( <div> <Title /> <Button /> </div> ); ReactDOM.render(<Container />, root); </script> </html>
JavaScript
복사
Container에 Title과 Button 코드를 복사/붙여넣기 한 것과 같다.
컴포넌트의 첫 글자는 반드시 대문자여야 한다. (소문자라면 html 요소라고 판단)
즉, 함수로 만들어야 하고, JSX 코드를 리턴해주는 형식이다.