React 정리

React 정리

개발 환경 설정

설치

$ npm install -g babel webpack webpack-dev-server
$ npm init

package.json

scripts에 start 명령어 추가

{
  "name": "contact",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "webpack-dev-server"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "babel-preset-stage-0": "^6.24.1",  //ES6 최신 문법 사용
    "react": "^15.5.4",
    "react-addons-update": "^15.5.2",   // Immutability Helper 사용
    "react-dom": "^15.5.4",
    "react-hot-loader": "^3.0.0-beta.7"
  },
  "devDependencies": {
    "babel-core": "^6.24.1",
    "babel-loader": "^7.0.0",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "webpack": "^2.6.0",
    "webpack-dev-server": "^2.4.5"
  }
}

설정

기본 디렉토리 구조

reactApp
├── package.json         
├── public            # 서버 public path
│   └── index.html    # 메인 페이지
├── src               # React.js 프로젝트 루트
│   ├── components    # 컴포넌트 폴더
│   │   └── App.js    # App 컴포넌트
│   └── index.js      # Webpack Entry point
└── webpack.config.js # Webpack 설정파일

webpack.config.js

var webpack = require('webpack');

module.exports = {
    entry: ['react-hot-loader/patch', './src/index.js'] ,

    output: {
        path: __dirname + '/public/',
        filename: 'bundle.js'
    },

    devServer: {
        hot: true,
        inline: true,
        host: '0.0.0.0',
        port: 4000,
        contentBase: __dirname + '/public/',
    },

    module:{
        loaders: [
            {
                test: /.js$/,
                loader: 'babel-loader',
                exclude: /node_modules/,
                query: {
                    cacheDirectory: true,
                    presets: ['es2015', 'stage-0', 'react'],
                    plugins: ["react-hot-loader/babel"]
                }
            }
        ]
    },

    plugins: [
        new webpack.HotModuleReplacementPlugin()
    ]
};

Component LifeCycle

Component LifeCycle

  1. componentWillMount - 렌더링이 되기 전(DOM 위에 만들어지기 전에 실행됨), DOM 처리 못함
  2. componentDidMount - 컴포넌트 생성 후 렌더링 된 다음 실행, 다른 자바스크립트 프레임워크 연동 및 AJAX, setTimeout, setInterval 사용
  3. componentWillReceiveProps - 새로운 Props를 받았을 때, props 에 따라 state 를 업데이트할 때 사용, setState 사용가능
  4. shouldComponentUpdate - props, state 가 변경되었을때 리렌더링할지 정함, 비교후 boolean 반환, JSON.stringify를 사용하여 여러 필드 비교하면 편함
  5. componentWillUpdate - 업데이트 되기 전, setState 사용불가능
  6. componentDidUpdate - 업데이트 된 후
  7. componentWillUnmount - 컴포넌트가 DOM에서 사라진 후 실행

참조 : https://velopert.com/