kok202
React 기본 강좌 정리 - 1~2

2020. 2. 11. 03:29[정리] 기능별 개념 정리/React

다음 강의 내용을 기반으로 정리하고 있습니다.

강의 동영상 

강의 깃허브

 

JSX

JSX 가 없는 경우 원래는 아래와 같이 써야한다.

바벨은 자바스크립트의 최신 문법과 JSX 를 사용할 수 있게 도와주는 도구다.

const reactElement = React.createElement;
render() {
	reactElement(...);
}

태그안에 함수를 직접 입력할 경우 함수가 매번 생기게된다. 가능한 JSX 안의 함수는 클래스안의 메소드로 분리하는 것이 좋다.

 

프래그먼트

JSX 에서의 렌더의 최상위 컴포넌트는 반드시 하나만 존재해야한다.

일반적으로 <div> ~~ </div> 로 감싸지게 되는데 불필요한 div 태그가 HTML 에 생기므로 불필요한 div 를 원치 않는다면 아래와 같이 빈 태그(<>) 나 프래그먼트(<React.Fragment>) 를사용할 수 있다.

1. <> ~~ </>
2. <React.Fragment> ~~ </React.Fragment>

 

기본 이벤트 핸들러

// onClick, onChange, onSubmit, onLoad, onInput, onFocus, onBlur

 

함수형 setState

setState 는 비동기 동작이다. 그래서 setState 가 여러번 사용될 경우 생각하는데로 동작하지 않을 수도 있다.

예전 State 값으로 새로운 State 를 만들어야하는 경우는 함수형 setState를 쓴다.

this.setState((prevState) => {
	return {
    	myValue: prevState.myValue++;
    }
});

setState 가 비동기 동작인 이유는 setState 를 여러번 호출 할 경우 (부분적으로 state 안의 값을 변경하기 위해), 동기 동작일 때 render 를 매번 새롭게 해줘야한다. 반면 setState 를 비동기 동작으로 하여 리액트가 이러한 변경을 한번에 모아서 처리할 수 있기 때문에 렌더 함수의 호출을 줄일 수 있다.

 

ref

React 가 화면을 컨트롤 할 수 있도록 해야한다. 그러기 위해선 가능한 Document 를 사용하지 않아야한다. 이럴때 ref를 사용한다. 아래와 같이 사용하면 특정 태그를 참조하는 멤버 변수를 만들 수 있다.

this.myInputRef;

// ~~

<input ref={(c) => {this.myInputRef = cl}} />

 

React Hooks

const MyComponent = () => {
	return <div> Hello World </div>
}

함수형 컴포넌트의 작업방식이 익숙해지다 보면 클래스를 작성하는 과정이 불편하다. 그런데 함수형 컴포넌트는 ref 와 state 를 사용할 수 없다. 함수형 컴포넌트에서도 state 와 ref 를 쓰고 싶다. 이때 사용할 수 있는것이 React Hooks 이고 리액트에서도 클래스 기반의 컴포넌트보다 Hooks를 쓰는 것을 권장하고 있다.

const MyComponent = () => {
	const [myValue1, setMyValue1] = React.useState(1);
	const [myValue2, setMyValue2] = React.useState(1);
	const inputRef = React.useRef(null);
	return <div> Hello World </div>
}

React.use 로 시작하는 것들(ex. React.useRef , React.userState ... )이 Hooks다. state 변수를 비구조화 할당을 이용하여 선언하고 사용할 수 있다.

 

Node 와 웹팩

웹팩이 없으면 하나의 자바스크립트 파일에 컴포넌트를 죄다 작성해야한다. 페이스북의 컴포넌트가 2만개 정도되는데 이를 다 적어줄 수 없는 노릇이다. 웹팩은 여러개의 자바스크립트 파일을 하나의 자바스크립트 파일로 만들어준다.

 

* Node != 서버, Node = 자바스크립트 실행기

Node 를 사용하면 pakage.json 이 생긴다.

npm install react
npm install react-dom
npm install -D webpack
npm install -D webpack-cli
npm install -D @babel/core // 최신 문법
npm install -D @babel/preset-env // 환경에 맞게 알아서 바꿔준다
npm install -D @babel/preset-react // JSX 문법
npm install -D @babel/plugin-proposal-class-properties // state 할당 문법
npm install babel-loader // 바벨과 로더를 연결

-D 개발에서만 사용하겠다는 의미. webpack을 설치했다면 다음과 같은 파일을 이용하여 webpack 설정을 다룰 수 있다.

 

webpack.config.js

const paht = require('path'); // node 에서 path 를 쉽게 조작할 수 있도록 도와주는 모듈

module.exports = {
	name: 'myWebPack', // 웹팩 설정 이름
	mode: 'development',
	devtool: 'eval', // production 일 때는 hidden-source-map
	resolve: {
		extensions: ['.js', '.jsx'] // 확장자가 js, jsx entry
	}
    
	// 입력 
	entry: {
		app: ['./file1', 'file2'],
	},
    
	// 입력에 적용할 모듈 설정
	modules: {
		// jsx 나 jsx 파일에 babel-loader 룰을 적용하겠다.
		rules: [{
			test: /\.jsx?/. 
			loader: 'babel-loader',
			options: {
				presets: ['@babel/preset-env', '@babel/preset-react']
				plugins: ['@babel/plugin-proposal-class-properties']
			},
		}]
	}
    
	// 출력 ./dist/app.js
	output: {
		path: path.join(__dirname, 'dist'), // 현재 폴더안에 있는 dist 폴더
		filename: 'app.js'
	},
};

file1.jsx 와 file2.jsx 를 불러와서 ./dist 폴더 아래에 app.js 를 만들어라.

 

Webpack -> modules -> rules -> options -> preset

plugin 들의 모음. preset 에 설정을 줄 수 도 있다.

...
presets : [
	['@babel/preset-env', {
    	targets: {
        	browsers : ['> 5% in KR'] // 한국에서 점유율이 5% 넘는 브라우저만
        }
    }]
]
...

 

Webpack -> plugins

module.exports = {
	...
	entry: { ... },
	modules: { ... },
	plugins: [
		//모든 module 의 rule 안에 debug true 값을 넣어주는 플러그인
		new webpack.LoaderOptionsPlugin({debug:true}), 
	]
	output: { ... },
};

 

Module.exports

바깥 클래스에서도 사용할 수 있게한다.

추후 exports 문법으로 변경된다.

 

'~' 은(는) 내부 또는 외부 명령, ... 배치파일이 아닙니다.

npm 에 해당 명령어가 등록되어있지 않은 경우. 이런 경우 명령어를 등록해주거나 아니라면 package.json 파일 아래에 scripts 안에 해당 명령어 관련 설정을 추가해줘야한다.

 

webpack-dev-server 

프론트 코드를 localhost 에 띄우는 띄워준다.

--hot : 프론트엔드의 코드가 변경되었을 때 변경점을 파악해서 다시 띄워준다.

콘솔창에 나오는 [HMR] 의미 : Hot module reload

 

 

'[정리] 기능별 개념 정리 > React' 카테고리의 다른 글

React 기본 강좌 정리 - 5~7  (0) 2020.02.13
React 기본 강좌 정리 - 3~4  (0) 2020.02.12
React 강의 정리 (6)  (0) 2019.08.23
React 강의 정리 (5)  (0) 2019.08.18
React 강의 정리 (3,4)  (0) 2019.08.18