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
복사