현재 일단 시작해놓은 과정들이 많지만, 제대로 알지 못한다는 불안감에 고민보다는 일단 실천해보기로한다.
그래서 다시 시작해보는 React 정복하기.
실전 리액트 프로그래밍 교재와 함께 진행한다.
그래도 한 번씩은 접해봤던 React 내용이 나와서 이해하기에는 좀 수월한 것 같다.
리액트는 페이스북에서 개발하고 관리하는 UI 라이브러리이다.
UI 기능만 제공하기 때문에 전역 상태 관리, 라우팅, 빌드 시스템 등을 개발자가 구축해야 한다.
create-react-app
을 사용하면 쉽게 리액트 개발 환경을 구축할 수 있다.
프론트엔드 라이브러리를 사용하는 이유는 UI를 자동으로 업데이트 해주기 때문이다.
UI = render(state)
API통신이나 사용자 이벤트를 통해 프로그랢의 상태값을 변경하면 React
가 변경된 상태값을 기반으로 UI를 자동 업데이트 한다.
render()
는 순수함수여야 하므로 인수 state가 변하지 않으면 항상 같은 값을 반환해야한다.)component
상태값을 수정할 때는 기존값을 변경하는게 아닌 새로운 객체를 생성해야한다.)react javascript 파일 CDN 방식
<!-- 1️⃣ -->
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
<!-- 2️⃣ -->
<script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script>
<!-- 3️⃣ -->
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<!-- 4️⃣ -->
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>
development
: 개발 환경에서 사용되는 파일
production
: 배포 환경에서 사용되는 파일
1, 2번
은 플랫폼 구분없이 공통으로 사용되는 리액트의 핵심기능을 담고 있으며, 3, 4번
은 웹에서만 사용되는 파일이다.
📑 HTML
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello World</title>
</head>
<body>
<h2>프로젝트가 마음에 들면 좋아요 버튼을 눌러주세요.</h2>
<!-- react로 렌더링할 때 사용할 돔 요소 -->
<div id="react-root"></div>
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<script src="simple1.js"></script>
</body>
</html>
📑 JS
function LikeButton() {
/* componenet의 초기값, 상태값 정의 */
const [liked, setLiked] = React.useState(false);
/* component 상태에 따른 버튼 문구 */
const text = liked ? '좋아요 취소' : '좋아요';
/* createElement() : 리액트 요소 반환 */
return React.createElement(
'button',
{ onClick: () => setLiked(!liked) }, /* 클릭하면 component 상태값 변경 */
text,
);
}
const domContainer = document.querySelector('#react-root');
/* development.js 파일에서 전역 변수로 만든 ReactDOM 변수를 사용해서
만든 component를 react-root 돔 요소에 붙인다. */
ReactDOM.render(React.createElement(LikeButton), domContainer);
초기 liked
의 상태는 false
여서 버튼이 '좋아요'이고,
버튼을 누르면 liked
의 상태가 true
가 되기 때문에 '좋아요 취소'가 된다.
대부분 createElement를 직접 작성하지 않고 바벨(Babel)을 사용하여 JSX 문법을 사용한다.
📑 HTML
3개의 <div>
요소에 LikeButton component
렌더링한다.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello World</title>
</head>
<body>
<h2>프로젝트가 마음에 들면 좋아요 버튼을 눌러주세요.</h2>
<!-- react로 렌더링할 때 사용할 돔 요소 -->
<div id="react-root1"></div>
<p>
...
</p>
<div id="react-root2"></div>
<p>
...
</p>
<div id="react-root3"></div>
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<script src="simple2.js"></script>
</body>
</html>
📑 JS
function LikeButton() {
const [liked, setLiked] = React.useState(false);
const text = liked ? '좋아요 취소' : '좋아요';
return React.createElement(
'button',
{ onClick: () => setLiked(!liked) },
text,
);
}
ReactDOM.render(React.createElement(LikeButton), document.querySelector('#react-root1'));
ReactDOM.render(React.createElement(LikeButton), document.querySelector('#react-root2'));
ReactDOM.render(React.createElement(LikeButton), document.querySelector('#react-root3'));