SlideShare a Scribd company logo
React

Redux

React Native
Leonardo YongUk Kim

Realm
contents
1. 리액트

2. 웹팩, 핫 모듈 대체, 유니버설 렌더링

3. 리덕스

4. 리액트 네이티브

4. 다음은?
1.

리액트
1.1 왜 React인가요?
1.1 왜 React인가요?
https://twitter.com/sebmarkbage/status/632257978003951616
페이스북이 만든 View 라이브러리
페이스북과 인스타그램에 직접 사용.
심지어 베타 버전으로 개밥 복용.
1.2 Hello, world!
패키지를 먼저 설치합시다.

npm install babel-core --save

npm install react --save

npm install react-dom --save(0.14가 정식 버전이 되면)
1.2 Hello, world!
나는 최신 버전(현재로서는 0.14.0-RC 버전)을 사용하고 싶어요.

npm install babel-core --save

npm install react@0.14.0-rc1 --save

npm install react-dom@0.14.0-rc1 —―save

0.14.0 이상 버전도 react-dom 모듈도 script 태그로 포함시키는 것을 잊지 마세요.
React 라이브러리
Babel Browser (브라우저 번역기)
번역될 영역에 text/babel 표시
렌더링 메서드
그려질 내용
그려질 위치
React Redux React Native
1.3 JSX
1. 자바스크립트 안에 HTML이에요? HTML과 유사한 문법을 가진 JSX입니다.

2. 어떻게 실행되는 거에요?text/babel 영역을 바벨이 번역해서 자바스크립트로 만들어요.

3. 실행시간에 번역하면 느리지 않나요? 프로덕션에선 번역된 코드를 씁니다.

4. 튜토리얼에서는 바벨을 안쓰던데 text/jsx쓰던데? 그 방법 0.14에서 폐기됩니다. (곧)
1.3 JSX
Babel에 의한 번역



(0.14는 자바스크립트를 쓰지 않는

인라인버전도 있음)
1.4 Hello, class
HelloClass란 이름으로 컴포넌트 생성.

클래스명은 대문자로 시작.
JSX를 리턴하는 함수를 render에
작성한 HelloClass 객체를 화면에 표시.

React.render에 사용할 클래스는 하나만.
React Redux React Native
1.5 Hello, prop
프로퍼티 조회는 this.props에서

프로퍼티는 사용 시점에 정의되며

읽기 전용.
someone 프로퍼티 설정
React Redux React Native
1.6 Count, state
1.6 Count, state
state의 초기값은 getInitialState에
서

props.number 의 값으로 설정한다.
click 이벤트 처리할 콜백.

상태 값 변경은 this.setState에서
onClick 처리 this.handleClick에서

this.state.number로 설정된 상태 사
용.
1.6 Count, state
this.props.number의 값을 2015로

설정한다.



값을 제대로 전달하기 위해 {2015}로

설정하였다. “2015”로 전달하면 문자
열로 전달된다.
문구를 클릭하면 숫자가 증가
1.7 Multiple Components
AvatarRender
ProfilePic
ProfileLink
1.7 Multiple Components
AvatarRender
ProfilePic
ProfileLink
Avatar
ProfilePic
ProfileLink
1.7 Multiple Components
atar
ProfilePic
ProfileLink
1.7 Multiple Components
ar
ProfilePic
ProfileLink
1.7 Multiple Components
React Redux React Native
1.8 Virtual DOM
Virtual DOM (Javascript 영역) HTML DOM
상태(state)가 바뀌면 항상 Virtual DOM은 그려진다.

Virtual DOM이 변경되어도 실질적인 변경이 있을 때만 DOM에 적용된다.

개발자도 상태를 신경쓸 필요가 거의 없고 성능의 감소도 적다.
비교조정(Reconciliation)
1.8 Virtual DOM
비교조정은 아직 효율적인 알고리즘을 발견하지 못했다. O(n^3)

http://grfia.dlsi.ua.es/ml/algorithms/references/editsurvey_bille.pdf

React는 휴리스틱을 동원하여 현실적인 효율을 높인다.
1.8 Virtual DOM
동일 레벨 비교Before After
1.8 Virtual DOM
div들 컴포넌트
같은 콤퍼넌트에 대해서 재사용을 시도하고 다른 콤포넌트는 지우고 생성한다.

다른 콤퍼넌트는 다른 트리를 만들어 낼 것으로 예상한다.
1.8 Virtual DOM
키가 없는 경우
리스트의 경우 키(key)가 없는 콤퍼넌트는 첫번째 요소부터 재사용을 한다.

이 경우 state의 값은 날라가고 소유주(상위 클래스)가 값을 되살릴 의무가 있다.

키가 있는 경우에는 재사용에 앞서 순서를 조절하여 활용한다.
1 2 3 4
1 2 3 5 4
키가 있는 경우
1.8 Virtual DOM
http://calendar.perfplanet.com/2013/diff/
https://facebook.github.io/react/docs/reconciliation-ko-KR.html
1.9 Life Cycle
componentWillMount
componentDidMount
componentWillReceiveProps
shouldComponentUpdate
componentWillUpdate
componentDidUpdate
componentWillUnmount
DOM에 붙을 예정
DOM에 붙었음
프로퍼티 받을 것임
업데이트 해야하나?
컴포넌트 업데이트 예정
컴포넌트 업데이트
DOM에서 떨어질 예정
2.

웹팩,

핫 모듈 대체,

유니버설 렌더링
2.1 Webpack이 뭐에요?
2.1 Webpack이 뭐에요?
의존성을 타고 로더를 적용해 스태틱 에셋으로 변환.

- CommonJs 모델과 AMD모두 지원

다양한 로더를 통해 확장성을 지원.

- Babel을 통한 ES6, 7의 지원. SCSS, Less 등의 지원. 인라인 파일.

- 핫 모듈 대체를 이용하여 실시간으로 기능을 갱신.
http://webpack.github.io/
2.2 웹팩, 스태틱 버전 패키지 설치
npm install webpack -g

npm install babel-core —―save-dev

npm install babel-loader —―save-dev

npm install react —―save
웹팩
바벨 번역기 (이제 dev에서만 필요합니다.)
바벨 로더 (웹팩에서 바벨을 수행하기 위함)
리액트
2.3 웹팩, 설정 파일(webpack.config.js)
entry의 hello.jsx 파일을 타고 들어갑니다.
출력될 파일은 현재디렉토리/build/hello.js
.jsx? 로 끝나는 파일을 찾아

/node_modules/이 포함된 것은 빼고

babel 로더(jsx 처리, ES6)를

적용합니다.
2.4 웹팩, hello.jsx
별도의 JSX 파일에서는 CommonJs의 방식으로

react를 참조해야 합니다.
document를 참조할 때는 HTML에서 head가

아닌 body에서 참조해야한다.
2.3 웹팩, 수행
2.3 hello.jsx (ES6)
2.3 hello.jsx (ES6)
ES6 import
상속기반의 인터페이스
2.4 Hot Module Replacement
동적으로 코드 모듈을 교체하는 기법.
Hot Module Replacement를 지원하는 모듈은 업데이트를 가지고 있다.

- 업데이트 메니페스트 (json)

- 하나 이상의 업데이트 청크(chunks) (js)
2.4 Hot Module Replacement
청크 1, 3, 4를 갱신하는

업데이트 메인 0
2.4 Hot Module Replacement
모듈 4를 교체하는 청크 1
2.4 Hot Module Replacement
모듈 9를 교체하고 12를

추가하는 청크 3
청크 4는 모듈 10과 11을

제거했다.
2.4 Hot Module Replacement
- 모듈 단위로 라이브리로드가 가능.

- 프로덕션 레벨에서 사용 가능 (이라고 설명하고 있지만 WebpackDevServer에서만 봤음.)

- 코드 스플리팅을 통해 필요한 부분만 다운로드.

- 부분적으로 적용이 가능하고 HMR 코드를 비활성화하면 관련 코드 제거.
이미 만들어진 HMR을 씁시다. (eg. React Transform HMR, React HMR, Redux HMR)
제작에 관심이 있는 분:
- example: http://webpack.github.io/example-app/

- API: http://webpack.github.io/docs/hot-module-replacement.html
Depreacated
2.4 React HMR (deprecated)
Thanks, Dan Abramov
2.4 React HMR
npm start
2.5 React Transform HRM
npm install

babel-plugin-react-transform

—―save-dev

npm install

react-transform-hmr 

—―save-dev
Babel 용 React Transform
Babel용 React Transform용 HRM
일반화된 Transform을 Babel용으로 만들겠다. (HRM 이외에도 쓰겠다.)
Thanks again.
see also: 

https://github.com/gaearon/babel-plugin-react-transform
React Redux React Native
2.6 Universal Rendering
Angular.js 1.x
Frontend
Express.js
Backend
VS
Frontend
Express.js
Backend
React or

Anguar.js 2.x
Traditional Model Isomorphic /

Universal rendering
2.5 Universal Rendering
Virtual

DOM
renderToString
render
HTML String
DOM
3.

리덕스
3.1 Single source of truth
store라는 단일 계층 객체로

전체 애플리케이션의 상태를 관리.
여러 store를 사용하는 flux와는

다름.
3.2 State is read-only
상태의 변경은 action을 전달해야만

가능.
action은 단일 객체.

action 팩토리 등을 만들어 사용.
3.3 Mutations are written as pure functions
state
action
new state
reducers (pure functions)
3.3 Mutations are written as pure functions
3.3 Mutations are written as pure functions
3.3 Mutations are written as pure functions
3.4 React Redux
npm install react-redux —―save

npm install redux —―save
3.4 React Redux (래퍼)
3.4 React Redux (dispatch 호출)
3.4 React Redux (this.props 주입)
4.

리액트 네이티브
4.1 setup
npm install -g react-native-cli

react-native init AwesomeProject
4.2 createClass
4.3 styles
4.4 registerComponent
React Redux React Native
5.

다음은?
5.1 react.careers
5.2 react.rocks
5.3 참고
• React 한글 버전 문서:

http://reactkr.github.io/react/docs/getting-started-ko-KR.html
• Flux 한글 버전 문서:

http://haruair.github.io/flux/docs/overview.html#content
• Redux 한글버전 문서:

http://dobbit.github.io/redux/
• 페이스북 그룹 React Korea와 Reactist
5.3 참고
• Unidirectional User Interface Architectures

http://staltz.com/unidirectional-user-interface-architectures.html
• React Router

https://rackt.github.io/react-router/
Q&A
Thank You

More Related Content

What's hot (18)

PPTX
[114]angularvs react 김훈민손찬욱
NAVER D2
 
PDF
ReactJS로 시작하는 멀티플랫폼 개발하기
Taegon Kim
 
PDF
Envoy 를 이용한 코드 배포 자동화
Juwon Kim
 
PDF
Python server-101
Huey Park
 
PDF
[120316] node.js 프로그래밍 5장
sung ki choi
 
PDF
실시간으로 안드로이드 프론트엔드 작업하기
Haze Lee
 
PDF
Spring Boot 1
경륜 이
 
PDF
React Native를 사용한
 초간단 커뮤니티 앱 제작
Taegon Kim
 
PPTX
[112]rest에서 graph ql과 relay로 갈아타기 이정우
NAVER D2
 
PDF
Node.js 시작하기
Huey Park
 
PDF
[17.01.19] docker introduction (Korean Version)
Ildoo Kim
 
PDF
Javascript everywhere - Node.js | Devon 2012
Daum DNA
 
PDF
Node.js 현재와 미래
JeongHun Byeon
 
KEY
Meteor 0.3.6 Preview
Juntai Park
 
PDF
Front-end Development Process - 어디까지 개선할 수 있나
JeongHun Byeon
 
PPTX
Jenkins를 활용한 javascript 개발
지수 윤
 
PDF
[213]monitoringwithscouter 이건희
NAVER D2
 
PDF
Spring Boot 2
경륜 이
 
[114]angularvs react 김훈민손찬욱
NAVER D2
 
ReactJS로 시작하는 멀티플랫폼 개발하기
Taegon Kim
 
Envoy 를 이용한 코드 배포 자동화
Juwon Kim
 
Python server-101
Huey Park
 
[120316] node.js 프로그래밍 5장
sung ki choi
 
실시간으로 안드로이드 프론트엔드 작업하기
Haze Lee
 
Spring Boot 1
경륜 이
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
Taegon Kim
 
[112]rest에서 graph ql과 relay로 갈아타기 이정우
NAVER D2
 
Node.js 시작하기
Huey Park
 
[17.01.19] docker introduction (Korean Version)
Ildoo Kim
 
Javascript everywhere - Node.js | Devon 2012
Daum DNA
 
Node.js 현재와 미래
JeongHun Byeon
 
Meteor 0.3.6 Preview
Juntai Park
 
Front-end Development Process - 어디까지 개선할 수 있나
JeongHun Byeon
 
Jenkins를 활용한 javascript 개발
지수 윤
 
[213]monitoringwithscouter 이건희
NAVER D2
 
Spring Boot 2
경륜 이
 

Viewers also liked (20)

PPTX
Redux with React Native
Dan Jensen
 
PDF
React, Redux and es6/7
Dongho Cho
 
PDF
역시 Redux
Leonardo YongUk Kim
 
PPT
sungmin slide
sungminlee
 
PDF
Managing JavaScript Complexity
Jarrod Overson
 
PPT
Ti cs
Alexfrank
 
PDF
Xebicon2016 - React Native & Redux
pgdejardin
 
PPTX
Presentation1
Kshitiz Rimal
 
PDF
활성 사용자(Active user) 개념잡기
와이즈트래커
 
PDF
GDG DevFest 2014 - 코드 없이 오픈소스 기여하기: HTML5Rocks/KO 번역 야사
Chang W. Doh
 
PPTX
초보 개발자의 커뮤니티 입문기
Min Jae Kwon
 
PDF
XebiCon'16 : React Native et Redux, une complémentarité hors du commun. Par ...
Publicis Sapient Engineering
 
PDF
Service Worker 201 (한국어)
Chang W. Doh
 
PDF
Pieter De Baets - An introduction to React Native
tlv-ios-dev
 
PDF
WebRTC in 2014
Lee WonJae
 
PDF
Introduction to React Native & Redux
Barak Cohen
 
PDF
[Gsc2014 spring(9)]naver d2 소개 (gsc2014)
VentureSquare
 
PDF
Google Code Jam 2017 소개
Startlink
 
PDF
[Gsc2014 spring(11)]스마일게이트 orange farm 소개자료
VentureSquare
 
PDF
React native redux_sharing
Sam Lee
 
Redux with React Native
Dan Jensen
 
React, Redux and es6/7
Dongho Cho
 
역시 Redux
Leonardo YongUk Kim
 
sungmin slide
sungminlee
 
Managing JavaScript Complexity
Jarrod Overson
 
Ti cs
Alexfrank
 
Xebicon2016 - React Native & Redux
pgdejardin
 
Presentation1
Kshitiz Rimal
 
활성 사용자(Active user) 개념잡기
와이즈트래커
 
GDG DevFest 2014 - 코드 없이 오픈소스 기여하기: HTML5Rocks/KO 번역 야사
Chang W. Doh
 
초보 개발자의 커뮤니티 입문기
Min Jae Kwon
 
XebiCon'16 : React Native et Redux, une complémentarité hors du commun. Par ...
Publicis Sapient Engineering
 
Service Worker 201 (한국어)
Chang W. Doh
 
Pieter De Baets - An introduction to React Native
tlv-ios-dev
 
WebRTC in 2014
Lee WonJae
 
Introduction to React Native & Redux
Barak Cohen
 
[Gsc2014 spring(9)]naver d2 소개 (gsc2014)
VentureSquare
 
Google Code Jam 2017 소개
Startlink
 
[Gsc2014 spring(11)]스마일게이트 orange farm 소개자료
VentureSquare
 
React native redux_sharing
Sam Lee
 
Ad

Similar to React Redux React Native (20)

PDF
React Everywhere
Leonardo YongUk Kim
 
PDF
GDGoC_Backend_GoServer_5주차 발표자료.pdf
dpfls5645
 
PPTX
Spring Boot + React + Gradle in VSCode
dpTablo
 
PPTX
Sonatype nexus 로 docker registry 관리하기
KwangSeob Jeong
 
PDF
[1A6]Docker로 보는 서버 운영의 미래
NAVER D2
 
PDF
[오픈소스컨설팅]Docker on Kubernetes v1
Ji-Woong Choi
 
PPTX
React-Query가필요한가요.pptx
ssuser89c688
 
PPTX
Docker & Kubernetes 기초 - 최용호
용호 최
 
PPTX
Docker osc 0508
Open Source Consulting
 
PPTX
Vert.x 세미나 이지원_배포용
지원 이
 
PDF
Atom package part1
KangSeok(Thomas) Lee
 
PDF
왕초보를 위한 도커 사용법
GeunCheolYeom
 
PDF
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
Ji-Woong Choi
 
PDF
Internship backend
Yein Sim
 
PPTX
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
negabaro
 
PPTX
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Jude Kim
 
PDF
Introduction to Docker - LOGISPOT
Hosang Jeon
 
PDF
Docker (Compose) 활용 - 개발 환경 구성하기
raccoony
 
PDF
도커를 이용한 파이썬 모듈 배포하기
JunSeok Seo
 
PDF
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XpressEngine
 
React Everywhere
Leonardo YongUk Kim
 
GDGoC_Backend_GoServer_5주차 발표자료.pdf
dpfls5645
 
Spring Boot + React + Gradle in VSCode
dpTablo
 
Sonatype nexus 로 docker registry 관리하기
KwangSeob Jeong
 
[1A6]Docker로 보는 서버 운영의 미래
NAVER D2
 
[오픈소스컨설팅]Docker on Kubernetes v1
Ji-Woong Choi
 
React-Query가필요한가요.pptx
ssuser89c688
 
Docker & Kubernetes 기초 - 최용호
용호 최
 
Docker osc 0508
Open Source Consulting
 
Vert.x 세미나 이지원_배포용
지원 이
 
Atom package part1
KangSeok(Thomas) Lee
 
왕초보를 위한 도커 사용법
GeunCheolYeom
 
[오픈소스컨설팅]Subversion vs git - 참을 수 없는 간단함
Ji-Woong Choi
 
Internship backend
Yein Sim
 
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
negabaro
 
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
Jude Kim
 
Introduction to Docker - LOGISPOT
Hosang Jeon
 
Docker (Compose) 활용 - 개발 환경 구성하기
raccoony
 
도커를 이용한 파이썬 모듈 배포하기
JunSeok Seo
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XpressEngine
 
Ad

More from Leonardo YongUk Kim (20)

PDF
Compose Multiplatform 101
Leonardo YongUk Kim
 
PDF
Kotlin 2.0을 통해 알아보는 코틀린의 미래
Leonardo YongUk Kim
 
PDF
안드로이드 빌드: 설탕없는 세계
Leonardo YongUk Kim
 
PDF
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Leonardo YongUk Kim
 
PDF
MVC부터 MVVM, 단방향 데이터 흐름까지
Leonardo YongUk Kim
 
PDF
Anatomy of Realm
Leonardo YongUk Kim
 
PDF
PublishSubject
Leonardo YongUk Kim
 
PDF
Tensorflow 101
Leonardo YongUk Kim
 
PDF
Realm과 RxJava
Leonardo YongUk Kim
 
PDF
A brief introduction to Realm with Kotlin
Leonardo YongUk Kim
 
PDF
Realm Java
Leonardo YongUk Kim
 
PDF
3D Graphics 101
Leonardo YongUk Kim
 
PDF
오픈 소스로 취업하기: 나는 어떻게 오픈 소스를 하다 렘 개발자가 되었나?
Leonardo YongUk Kim
 
PDF
Realm: 초고속 데이터베이스
Leonardo YongUk Kim
 
PDF
Veni, Vide, Built: Android Gradle Plugin
Leonardo YongUk Kim
 
PPTX
A brief guide to android gradle
Leonardo YongUk Kim
 
PDF
Modern android
Leonardo YongUk Kim
 
PDF
Butter android views
Leonardo YongUk Kim
 
PDF
Actionbar and fragment
Leonardo YongUk Kim
 
PDF
좋은 뷰, 나쁜 뷰, 이상한 뷰
Leonardo YongUk Kim
 
Compose Multiplatform 101
Leonardo YongUk Kim
 
Kotlin 2.0을 통해 알아보는 코틀린의 미래
Leonardo YongUk Kim
 
안드로이드 빌드: 설탕없는 세계
Leonardo YongUk Kim
 
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Leonardo YongUk Kim
 
MVC부터 MVVM, 단방향 데이터 흐름까지
Leonardo YongUk Kim
 
Anatomy of Realm
Leonardo YongUk Kim
 
PublishSubject
Leonardo YongUk Kim
 
Tensorflow 101
Leonardo YongUk Kim
 
Realm과 RxJava
Leonardo YongUk Kim
 
A brief introduction to Realm with Kotlin
Leonardo YongUk Kim
 
3D Graphics 101
Leonardo YongUk Kim
 
오픈 소스로 취업하기: 나는 어떻게 오픈 소스를 하다 렘 개발자가 되었나?
Leonardo YongUk Kim
 
Realm: 초고속 데이터베이스
Leonardo YongUk Kim
 
Veni, Vide, Built: Android Gradle Plugin
Leonardo YongUk Kim
 
A brief guide to android gradle
Leonardo YongUk Kim
 
Modern android
Leonardo YongUk Kim
 
Butter android views
Leonardo YongUk Kim
 
Actionbar and fragment
Leonardo YongUk Kim
 
좋은 뷰, 나쁜 뷰, 이상한 뷰
Leonardo YongUk Kim
 

React Redux React Native