cdn으로 리액트를 하진않을 것이지만 알아놓자.
cdn을 사용하면 라이브러리를 우리 로컬에 두지 않고 네트워크 서비스를 이용하는 것이다.
<!--react와 react-dom -->
<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>
<!--babel.min.js-->
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<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="https://unpkg.com/@babel/standalone/babel.min.js"></script>
</head>
<body>
<h1>Hello</h1>
</body>
<!--div#root 태그를 만들어줍니다.-->
<div id="root"></div>
<!--리액트를 사용하는 코드 입력-->
<script type="text/babel">
</scirpt>
</html>
<컴포넌트 이름></컴포넌트 f이름>
ReactDOM.render()
메소드를 사용한다.ReactDOM.render(컴포넌트, 컨테이너)
<script type="text/babel">
//컴포넌트와 컨테이너 생성
const componet = <h1>리액트 기본</h1>
const container = document.getElementById('root')
//출력하기
ReactDOM.render(component, container)
</scirpt>
과정
1) h1 컴포넌트를 생성한다.
2) h1 컴포넌트를 출력할 div#root를 읽는다.
3) ReactDOM.render()
메소드로 컴포넌트를 div#root
에 출력한다.
이렇게 자바스크립트 코드 내부에 HTML 코드를 사용한 문법은 JSX(자바스크립트 확장 문법) 이라고 한다. 바벨이 JSX를 읽고 일반 자바스크립트로 변환해준 뒤 실행해준다.
태그 내부에 표현식을 삽입해서 출력한다.
속성으로 표현식을 출력할 때 따옴표는 사용하지 않는다.
<태그>{표현식}</태그>
<태그 속성={표현식} />
클래스 컴포넌트 만들기
React.Component
클래스 상속을 받아야 컴포넌트로 동작할 수 있는 속성과 메소드를 받는다.class 컴포넌트이름 extends React.Component {
render() {
return <h1>출력할 내용</h1>
}
}
루트 컴포넌트를 클래스 컴포넌트로 구현하기
<script type="text/babel">
class APP extends React.Component {
render() {
return <h1>출력할 내용</h1>
}
}
//출력하기
const container = document.getElementById('root');
ReactDOM.render(<APP/>,container);
</scirpt>
this.props
속성이 사용가능하다. 컴포넌트 선언을 전달한다.<!DOCTYPE html>
<html>
<head>
<title>Document</title>
<!-- 리액트 사용 준비 -->
<script src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<!-- 리액트를 사용하는 코드 입력 -->
<script type="text/babel">
// 애플리케이션 클래스 생성하기
class App extends React.Component {
render () {
return <div>
<h1>{this.props.name} 님 안녕하세요!</h1>
<img src={this.props.imgUrl} />
</div>
}
}
// 출력하기
const container = document.getElementById('root')
ReactDOM.render(<App name="구름" imgUrl="http://placedog.net/400/200" />, container)
</script>
</body>
</html>
constructor (props)
코드블록 부분
-> 생성자이다. 생성자가 여러일을 해주므로, super(props)
를 사용해 부모 생성자를 호출한다.
componentDidMount
,componentWillUnmount
-> 컴포넌트가 내부적으로 특정 상황에 호출하는 메소드
-> 라이프 사이클 메소드라고 부른다.
<script type="text/babel">
// 애플리케이션 클래스 생성하기
class App extends React.Component {
constructor (props) {
super(props)
// 생성자 코드
}
render () {
return
// 출력할 것
}
componentDidMount () {
// 컴포넌트가 화면에 출력되었을 때
}
componentWillUnmount () {
// 컴포넌트가 화면에서 제거될 때
}
}
// 출력하기
const container = document.getElementById('root')
ReactDOM.render(<App />, container)
</script>
state 에는 출력할 값을 저장하고
state 속성 값을 변경할 때는 setState() 메소드를 사용
// 상태 선언하기 (생성자 위치)
this.state = {속성: 값}
// 상태 변경하기(이외의 위치)
this.setState = {변경할 속성: 값}
npx create-react-app my-app
여기서 npx는 노드 패키지 실행을 도와주는 도구이다.
creat react app이라는 npm 레지스트리에 있는 패키지를 우리가 리액트를 실행시킬 폴더에서 실행하여 리액트 설치를 도와준다.
명렁어를 실행하면 리액트 환경이 만들어진다!
cd my-app
npm start
이 명령어를 실행하면 웹페이지가 켜지면서 리액트 웹페이지가 실행된다.
일단 필요없는 파일들을 지워주면 위와 같은 구조가 된다.
public
폴더의 index.html
-> 페이지 템플릿
src
폴더의 index.js
-> 자바스크립트 시작점
src
폴더에 대부분의 리액트 소스코드들인 js,css 파일을 넣어주면 된다.
Webpack
은 이 안의 폴더만 보며, 이외의 폴더는 보지 않는다.
packeage.json
파일안에는 해당 프로젝트에 대한 정보들이 들어있다.
dependencies
- 프로젝트 이름, 버전, 필요한 라이브러리와 라이브러리의 버전
scripts
- 앱을 시작할 때 사용할 스크립트, 앱을 빌드할 때, 테스트할 때 사용할 스크립트, 자주 실행해야하는 명령어를 scripts로 작성해두면 npm 명령어로 실행 가능
eslintConfig
- 소스코드 입력 시 문법이나 코드 포맷을 체크해주는 설정을 명시