홈
home
자바
home
9️⃣

0. 구구단

•
리액트를 왜 쓰는가
•
강의 수강 시 주의할 점
•
첫 리액트 컴포넌트(아직은 Class)
•
가독성을 위한 JSX(XML임!)

리액트를 왜 쓰는가

한국에서 대세가 되어버린 리액트,, 한 번 치우쳐지면 계속되는게 한국의 특징,, 혁신적인 기술이 나오지 않는 한 10년 정도는 지속될듯하다.
첫 웹 애플리케이션 : G-Mail
웹이 홈페이지 역할 뿐 아니라 애플리케이션 처럼 돌릴 수 있는! ex) 웹에서 엑셀, 파워포인트를 다룰 수 있는 것 등
⇒ 이에 따라서 프론트에서 데이터를 다루는 일이 많아지자 자바스크립트로는 역부족이 되었다.
⇒ 싱글 페이지 애플리케이션인 리액트,…의 등장

강의 수강 시 주의할 점

•
리액트 필요성 느끼기 : 리액트 사이트를 리액트 없이 만들어보고 필요성을 느껴보는게 좋다.
•
리액트가 필요한 이유
1.
데이터와 화면의 일치 문제
2.
간단한 웹페이지라도 싱글 페이지 애플리케이션을 사용해서 만드는게 대세
3.
깜빡임 없이 화면이 넘어감
•
하지만 단점도 존재
1.
검색엔진에서 리액트로 만든 웹페이지 노출이 어려움
2.
자바스크립트를 소홀히 하지 말 것. (프론트의 기본기가 JS임) 그리고 리액트를 하려면 자바스크립트를 알아야 함!

첫 리액트 컴포넌트(아직은 Class)

•
웹 사이트는 html, css, javascript 밖에 읽지 못함! 리액트도 결국 새로운 존재가 아닌 js 일 뿐임!
•
결과물은 html, css, javascript가 나와야 한다.
강의에서는 원시적인 형태에서부터 시작하겠다! 후에는 createReact앱을 사용하게 된다.
<html> <head> </head> <body> <div id="root"></div> <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script> <!--<script src="https://unpkg.com/react@18/umd/react.production.min.js" crossorigin></script>--> <!--<script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js" crossorigin></script>--> <script> 'use strict'; const e = React.createElement; // 1. 클래스 방식, 2. 화살표 함수 방식 // 요즘 클래스 방식은 거!의! 쓰이지 않음. 대부분의 경우 화살표 함수 방식 사용 // 강의에서는 클래스를 가르쳐주겠음 // 밑 코드가 리액트의 가장 원시적인 형태 // 1. 리액트는 자바스크립트다. // 2. 리액트는 데이터 중심으로 움직인다. class LikeButton extends React.Component { // 컴포넌트 (데이터와 화면을 하나로 묶어놓은 덩어리) constructor(props) { super(props); this.state = {liked: false}; // 데이터 (화면에서 바뀌는 부분들) } render() { if (this.state.liked) { return 'You liked this.'; } return e('button', {onClick: () => this.setState({liked: true})}, 'Like'); // 화면 // 데이터가 바뀌면 화면도 자동으로 바뀐다. // 자바스크립트 사용할 때는 화면에 있는 데이터를 이벤트를 붙여서 불러왔음 (화면 먼저 생각, 후에 데이터 생각) // 따라서 리액트를 쓸 땐 반대로 생각해야함 (데이터 먼저 생각, 후에 화면 생각) } } </script> <script> // LikeButton 컴포넌트를 "id=root"인 div에 그린다. ReactDOM.createRoot(document.querySelector('#root')).render(e(LikeButton)); </script> </body> </html>
JavaScript
복사

가독성을 위한 JSX(XML임!)

<html> <head> </head> <body> <div id="root"></div> <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script> <!-- 바벨 라이브러리--> <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script> <!--<script src="https://unpkg.com/react@18/umd/react.production.min.js" crossorigin></script>--> <!--<script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js" crossorigin></script>--> <script type="text/babel"> 'use strict'; class LikeButton extends React.Component { constructor(props) { super(props); this.state = {liked: false}; } render() { if (this.state.liked) { return 'You liked this.'; } // js로만 처리 하면 가독성이 안좋아지는 문제 발생 // return 에는 두 개의 태그 return 불가능 // 반드시 하나로 묶어줘서 return 해야함 div 혹은 fragment 사용 return ( // 밑 코드를 바벨이라는 라이브러리가 React.createElemet 로 바꿔줌 // 닫는 태그는 필수임! input도 닫아야함 // 조건문이나 반복문을 사용하고 싶은 경우 if, for 사용이 불가능 하기 때문에 // 삼항연산자와 map을 사용한다. <button onClick={() => this.setState({liked: true})}> {this.state.liked ? 'Liked' : 'Like!'} {[1, 2, 3].map((i) => { return <div>i</div>; })} </button> ); } } </script> <script type="text/babel"> ReactDOM.createRoot(document.querySelector('#root')).render(<LikeButton/>); </script> </body> </html>
HTML
복사
Kakao Channel