노마드코더 ReactJS로 영화 웹 서비스 만들기 강의 기록용 스토리
✍ 버튼을 클릭할 때마다
span
의 innerText가 바뀌는 페이지바닐라 JS
<!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 += 1; span.innerText = `Total clicks: ${counter}`; } button.addEventListener("click", handleClick); </script> </html>
body
에 요소를 작성하지 않고 JS 코드를 사용함✍ React JS로 HTML element 만들기 (어려운 방법)
<!DOCTYPE html> <html> <body> <div id="root"></div> </body> <script src="https://unpkg.com/react@17/umd/react.development.js" crossorigin </script> <script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js" crossorigin </script> <script> const root = document.getElementById("root"); const span = React.createElement( "span", { id: "cool-span", style: { color: "red" } }, "Hello, I'm a span" ); //React로 접근해서 span 만들기 ReactDOM.render(span, root); </html>
📌 포인트
React.createElement()
: React로 element를 만들어주는 코드React.createElement('tag', props, content);
ReactDOM.render()
: React element를 HTML로 만들어 배치해줌span
을 root 안에 배치✍ props에 eventListener 작성하는 방법 (어려운 방법)
<!DOCTYPE html> <html> <body> <div id="root"></div> </body> <script src="https://unpkg.com/react@17/umd/react.development.js" crossorigin </script> <script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js" crossorigin </script> <script> const root = document.getElementById("root"); const h3 = React.createElement( "h3", { onMouseEnter: () => console.log("mouse enter"), }, "Hello, I'm a h3" ); const btn = React.createElement( "button", { onClick: () => console.log("I'm Clicked"), }, "Click me" ); const container = React.createElement("div", null, [h3, btn]); ReactDOM.render(container, root); </script> </html>
📌 포인트
React.createElement()
에서 2개 이상의 component를 가지는 component를 만들 때는 array 사용<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
✍ JSX로 React Element 만들기
<!DOCTYPE html> <html> <body> <div id="root"></div> </body> <script src="https://unpkg.com/react@17/umd/react.development.js" crossorigin </script> <script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js" crossorigin </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 h3 </h3> ); const Button = ( <button onClick={() => console.log("I'm Clicked")}>Click me</button> ); const container = React.createElement("div", null, [Title, Button]); ReactDOM.render(container, root); </script> </html>
📌 포인트
<script type="text/babel"></script>
작성head
에 Babel이 변환한 코드가 들어가있음(위에서 사용한 React.createElement();
를 이용한 방식)onMouseEnter
과 onClick
같은 eventListener가 들어간 방식onClick={}
구조{ }
안에 eventListener 함수 넣기React.createElement();
를 사용하지 않고 아래 코드를 구현할 것
const container = React.createElement("div", null, [Title, Button]);
✍변수들 함수로 만들어주기
return 문법
function Title() { return ( <h3 id="title" onMouseEnter={() => console.log("mouse enter")}> Hello, I'm a h3 </h3> ); }
Arrow function expression
function Title = () => ( <h3 id="title" onMouseEnter={() => console.log("mouse enter")}> Hello, I'm a h3 </h3> );
✍ Container 안에 Title, Button 넣기
<script type="text/babel"> const root = document.getElementById("root"); function Title() { return ( <h3 id="title" onMouseEnter={() => console.log("mouse enter")}> Hello, I'm a h3 </h3> ); } const Button = () => ( <button onClick={() => console.log("I'm Clicked")}>Click me</button> ); const Container = () => ( <div> <Title /> <Button /> </div> ); ReactDOM.render(<Container />, root); </script> </html>
생성한 컴포넌트 이름의 첫 글자는 대문자