SlideShare une entreprise Scribd logo
1  sur  28
Javascript UI Framework
React
1 Introduce to React
2 Virtual DOM, JSX
3 React API
4 Component Lifecycle
5 React Sample Code
Introduce to
React
4
01
React 정의 및 등장배경
1 React정의
2 React등장배경
• 2010년
• 2013년 6월
• 2015년 1월
5
02
1 React특징
React 특징
• Just The UI
• Virtual DOM
• Data Flow
• JSX
6
02
2 MVC패턴과 React 차이
React 특징
VIEW
CONTROLLER
MODEL
• 예시) 쇼핑몰에서 장바구니에 상품 넣기
7
02
2 MVC패턴과 React 차이
React 특징
• 예시) 쇼핑몰에서 장바구니에 상품 넣기
VIEW
CONTROLLER
MODEL
View에만 초점을 맞췄습니다
MC를 원한다면
Angular 같은 MVC프레임워크와
함께 쓸 수 있습니다
UI 구현하기 좋습니다
8
03 React 의 장/단점
1 React의 장/단점
장점 단점
- Virtual DOM을 JS로 구현해서 UI Component의
속도가 엄청 빠릅니다.
- Component의 재사용과 복잡한 UI 컴포넌트
조합이 가능
- Uni-direction(단방향) 방식하에 데이터가 변경되면
관련된 모든 UI 컴포넌트가 변경됩니다.
9
01
1 React로HTML틀구현
React Sample Code
Virtual DOM,
JSX
11
01
Virtual DOM
1 Virtual DOM 정의
• ReactElement / ReactElement Factory
• ReactNode
• ReactComponent / ReactComponent Class
var MyComponent = React.createClass({
render: function() {
…
return (
…
);
});
var component = new MyComponent();
위와 같이 생성자를 직접 호출할 필요가 없습니다.
React가 알아서 호출해줍니다.
주의
12
01
Virtual DOM
2 Virtual DOM의장점
13
02
JSX
1 JSX
React
API
15
01
Top-Level API
1 Top-LevelAPI
• React.Component
• React.createClass
• React.createElement
• React.cloneElement
16
02
1 ComponentAPI구성요소
• setState
• setProps
Component API
17
02
2 Prop
Component API
18
02
3 PropTypes
Component API
19
02
4 setProps
Component API
20
02
5 state
Component API
21
02
6Prop와State를사용한 컴포넌트상호작용
Component API
Component
Lifecycle
23
01
1 ComponentLifecycle
Component Lifecycle
• componentWillMount() : 컴포넌트 생성 전
• componentDidMount() : 컴포넌트 생성 후
• componentWillReceiveProps() : 새로운 props 받기 전
• shouldComponentUpdate() : 컴포넌트 업데이트 여부
• componentWillUpdate() : 컴포넌트 업데이트 전
• componentDidUpdate() : 컴포넌트 업데이트 후
• componentWillUnmount() : 컴포넌트 소멸 전
24
01
2 ComponentLifecycle 예시
Component Lifecycle
React
Sample Code
26
01
React Sample Code
1 React실행경과시간표시
- 실행결과
27
01
React Sample Code
2 SpinnerButton
- 실행결과
감사합니다

Contenu connexe

Tendances

1.스프링프레임워크 개요
1.스프링프레임워크 개요1.스프링프레임워크 개요
[웹기반시스템 3조] mvc
[웹기반시스템 3조] mvc[웹기반시스템 3조] mvc
[웹기반시스템 3조] mvc
구 봉
 
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
Sang Don Kim
 

Tendances (20)

Angular 기본 개념 잡기
Angular 기본 개념 잡기Angular 기본 개념 잡기
Angular 기본 개념 잡기
 
서블릿(servlet)
서블릿(servlet)서블릿(servlet)
서블릿(servlet)
 
React.js 세미나
React.js 세미나React.js 세미나
React.js 세미나
 
React.js 세미나
React.js 세미나React.js 세미나
React.js 세미나
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
프론트엔드 개발 첫걸음
프론트엔드 개발 첫걸음프론트엔드 개발 첫걸음
프론트엔드 개발 첫걸음
 
01 introduce-react-js
01 introduce-react-js01 introduce-react-js
01 introduce-react-js
 
프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model
 
Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드
 
Backbone 발표
Backbone 발표Backbone 발표
Backbone 발표
 
어그로월드 Season1 - Aggro World season 1
어그로월드 Season1 - Aggro World season 1어그로월드 Season1 - Aggro World season 1
어그로월드 Season1 - Aggro World season 1
 
1.스프링프레임워크 개요
1.스프링프레임워크 개요1.스프링프레임워크 개요
1.스프링프레임워크 개요
 
[웹기반시스템 3조] mvc
[웹기반시스템 3조] mvc[웹기반시스템 3조] mvc
[웹기반시스템 3조] mvc
 
웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁
 
가볍게 살펴보는 AngularJS
가볍게 살펴보는 AngularJS가볍게 살펴보는 AngularJS
가볍게 살펴보는 AngularJS
 
Mean stack Start
Mean stack StartMean stack Start
Mean stack Start
 
[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것
 
Angular, What is SinglePageApplication
Angular, What is SinglePageApplicationAngular, What is SinglePageApplication
Angular, What is SinglePageApplication
 
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
 
Presentation1
Presentation1Presentation1
Presentation1
 

En vedette

En vedette (20)

An Introduction to WebRTC
An Introduction to WebRTCAn Introduction to WebRTC
An Introduction to WebRTC
 
왜Web rtc인가
왜Web rtc인가왜Web rtc인가
왜Web rtc인가
 
Tdevelopers forum web_rtc 기술 및 api 활용
Tdevelopers forum web_rtc 기술 및 api 활용Tdevelopers forum web_rtc 기술 및 api 활용
Tdevelopers forum web_rtc 기술 및 api 활용
 
WebRTC 품질 측정 기초
WebRTC 품질 측정 기초WebRTC 품질 측정 기초
WebRTC 품질 측정 기초
 
Intro to Web Map APIs
Intro to Web Map APIsIntro to Web Map APIs
Intro to Web Map APIs
 
Synchronizing application state using Virtual DOM trees
Synchronizing application state using Virtual DOM treesSynchronizing application state using Virtual DOM trees
Synchronizing application state using Virtual DOM trees
 
Introduction to React
Introduction to ReactIntroduction to React
Introduction to React
 
Repaint & reflow
Repaint & reflowRepaint & reflow
Repaint & reflow
 
React entry
React entryReact entry
React entry
 
WebRTC 전망 최진호_webappscamp
WebRTC 전망 최진호_webappscampWebRTC 전망 최진호_webappscamp
WebRTC 전망 최진호_webappscamp
 
Digitaalisesti vaikuttavaksi. @HelsinkiUniUX -projektin tarina
Digitaalisesti vaikuttavaksi. @HelsinkiUniUX  -projektin tarina Digitaalisesti vaikuttavaksi. @HelsinkiUniUX  -projektin tarina
Digitaalisesti vaikuttavaksi. @HelsinkiUniUX -projektin tarina
 
Introduction to React
Introduction to ReactIntroduction to React
Introduction to React
 
Why and How to Use Virtual DOM
Why and How to Use Virtual DOMWhy and How to Use Virtual DOM
Why and How to Use Virtual DOM
 
ReactNativeを語る勉強会
ReactNativeを語る勉強会ReactNativeを語る勉強会
ReactNativeを語る勉強会
 
React.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOMReact.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOM
 
Pjax 深入淺出
Pjax 深入淺出Pjax 深入淺出
Pjax 深入淺出
 
From Back to Front: Rails To React Family
From Back to Front: Rails To React FamilyFrom Back to Front: Rails To React Family
From Back to Front: Rails To React Family
 
React Native - Workshop
React Native - WorkshopReact Native - Workshop
React Native - Workshop
 
What is web rtc
What is web rtcWhat is web rtc
What is web rtc
 
Introduction to ReactJS
Introduction to ReactJSIntroduction to ReactJS
Introduction to ReactJS
 

Similaire à React

드래그홈2010홈페이지제안서
드래그홈2010홈페이지제안서드래그홈2010홈페이지제안서
드래그홈2010홈페이지제안서
draghome
 

Similaire à React (20)

1.react 101
1.react 1011.react 101
1.react 101
 
AngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJSAngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJS
 
Angular2 톺아보기
Angular2 톺아보기 Angular2 톺아보기
Angular2 톺아보기
 
20170202 D2 발표
20170202 D2 발표20170202 D2 발표
20170202 D2 발표
 
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulCreate App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
 
Angular vs react
Angular vs reactAngular vs react
Angular vs react
 
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
 
LucideWorks Banana 소개
LucideWorks Banana 소개 LucideWorks Banana 소개
LucideWorks Banana 소개
 
[부스트캠프 웹・모바일 7기 Tech Talk]안병준_프론트엔드,어쩌다 여기까지
[부스트캠프 웹・모바일 7기 Tech Talk]안병준_프론트엔드,어쩌다 여기까지[부스트캠프 웹・모바일 7기 Tech Talk]안병준_프론트엔드,어쩌다 여기까지
[부스트캠프 웹・모바일 7기 Tech Talk]안병준_프론트엔드,어쩌다 여기까지
 
React vac pattern
React vac patternReact vac pattern
React vac pattern
 
드래그홈2010홈페이지제안서
드래그홈2010홈페이지제안서드래그홈2010홈페이지제안서
드래그홈2010홈페이지제안서
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJS
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)
 
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
테스터도 알아야 할 웹 개발(테스트 교육 3장 1절 부분발췌)
 
Basic.pptx
Basic.pptxBasic.pptx
Basic.pptx
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
 
드래그홈2013표준제안서
드래그홈2013표준제안서드래그홈2013표준제안서
드래그홈2013표준제안서
 
React js 1
React js   1React js   1
React js 1
 

React

Notes de l'éditeur

  1. 목차는 다음과 같습니다.
  2. 2013년 6월 ReactJS(JS를 빼고 React라고 부르기도 한다)는 JSX라는 자바스크립트의 확장 문법을 통해 XHP와 유사한 기능을 제공하고 있습니다.
  3. - 단방향데이터흐름 이해하기 쉽다(데이터의 흐름이 일방 통행이라 이해하기가 쉽다. 상위 컴포넌트 -> 하위 컴포넌트) 하위 컴포넌트의 변화는 이벤트를 통해 감지한다.(상위 컴포넌트는 하위 컴포넌트에 이벤트를 추가해 이벤트 감지)
  4. React는 UI구현에 특화된 Framework입니다.
  5. 솔직히 코드는 많이 길어졌지만 훨씬 알아보기 쉬워졌습니다.
  6. - ReactElement ReactElement객체는 React.createElement를 통해 만들 수 있습니다. var root = React.createElement('div'); DOM에 새로운 트리를 렌더링하기 위해서는 ReactElement를 만들고 DOM Element (HTMLElement 또는 SVGElement)와 함께 React.render에 넘깁니다. ReactElement를 DOM Element와 혼동해서는 안됩니다. ReactElement는 DOM Element의 가상 표현입니다. 즉 가상 DOM입니다. React.render(root, document.getElementById('example')); DOM 엘리먼트에 프로퍼티를 추가하려면 두번째 인자로 프로퍼티 객체를, 세번째 인자로 자식을 넘깁니다. var child = React.createElement('li', null, 'Text Content'); var root = React.createElement('ul', { className: 'my-list' }, child); React.render(root, document.getElementById('example')); - ReactNode ReactNode는 다음 중 하나가 될 수 있습니다 이들은 자식을 표현하기 위해 다른 ReactElement의 프로퍼티에 사용됩니다. 사실상 이들이 ReactElement의 트리를 형성합니다. - ReactComponent ReactElement만 가지고도 React를 사용할 수는 있지만, React의 장점을 제대로 활용하려면 ReactComponent를 사용하여 상태를 가진 캡슐화된 객체를 만들기를 원할 것입니다. ReactComponent 클래스는 그냥 JavaScript 클래스 (또는 "생성자 함수")입니다. var MyComponent = React.createClass({ render: function() { ... } }); 이 생성자가 호출될 때 최소한 render 메소드를 가진 객체를 리턴해야 합니다. 이 리턴된 객체를 ReactComponent라고 부릅니다. var component = new MyComponent(props); // 절대 하지 마세요 테스트 목적이 아니라면 절대 이 생성자를 직접 호출하지 마십시오. React가 알아서 호출해줍니다. 대신 ReactComponent 클래스를 createElement에 넘겨 ReactElement를 받을 수 있습니다. var element = React.createElement(MyComponent);
  7. React의 경우는 setState가 호출되면 그 컴포넌트와 하위 컴포넌트가 다시 랜더링되는 대상이 됩니다. 이 말을 듣게 되면 매번 광범위하게 DOM이 갱신된다고 느껴지지만 React에서는 VirtualDOM이라고 하는 형태로 메모리상에 DOM의 상태를 유지하고 있고 전/후 상태를 비교하여 달라진 부분만 실제 DOM에 반영합니다. CSS도 마찬가지로 객체 형식으로 지정해 변경된 style만 갱신합니다.
  8. HTML은 태그가 제대로 닫히지 않아도 에러가 발생하지 않지만 JSX는 태그를 닫지 않은 경우 에러가 발생하므로 문법 문제를 쉽게 알아차릴 수 있습니다. - JSX 사용의미 JSX를 사용하면 HTML 문법과 비슷한 느낌으로 작성할 수 있어 비엔지니어도 이해하기 쉽다는 장점이 있습니다. 개인적인 성향 차이가 있다고는 하지만 개인적으로 React.DOM.div(null, ‘hello’) 보다 <div>hello</div>와 같은 방식이 더 좋다고 생각합니다. 또, 버전 0.12는 버전 0.11에 비해 React.createClass의 동작 방식(인터페이스)이 바뀌었지만(이것에 관한 내용은 다음 절에서 소개하겠습니다.) JSX를 사용하고 있는 경우엔 코드를 그대로 사용 가능합니다. 즉, JSX에 대한 지원이 조금 더 좋습니다. JSX를 사용했을 때의 이 점은 이 정도로 생각하고 있으므로 자바스크립트로 작성하고 싶은 사람은 굳이 JSX를 사용하지 않아도 괜찮을 것 같습니다. JSX 이외로 커피스크립트 환경을 고려해 만들어진 react-kup도 있습니다. - JSX를 사용하지 않을 경우 return React.DOM.div({className: 'container', 'Hello ' + this.props.name); React.render(React.createFactory(Hello)({name: 'React'}), document.getElementById("app"));
  9. - createClass React.createClass()는 컴포넌트를 작성할 때 사용하는 함수입니다.
  10. - setState 유저의 액션이나 Ajax 요청 등으로 값이 동적으로 변화하는 경우는 State를 사용합니다. 특정 this.state.xxx을 갱신할 때는 this.state를 사용해 갱신하는 것이 아니라 반드시 this.setState를 사용해 갱신합니다. 절대로 this.state를 직접 변경하지 않는 것이 좋습니다. 그 뒤에 setState()를 호출하면 그동안 변경했던 것이 교체될 수 있습니다. this.state는 변경 불가능한 것으로 생각하시는 것이 좋습니다. setState()를 호출해도 this.state가 곧바로 변경되지 않고 대기 중인 state transition이 만들어집니다. 이 메소드를 호출한 직후 this.state에 접근하면 바뀌기 전의 값을 리턴할 가능성이 있습니다. setState에 대한 호출이 동기적으로 처리된다는 보장이 없으며, 성능 향상을 위해 배치 처리될 수 있습니다. setState()는 shouldComponentUpdate()에 조건부 렌더링 로직이 구현되어 있지 않다면 항상 재렌더링을 발생시킵니다. 변경 가능한 객체를 사용하고 있고 조건부 렌더링 로직을 shouldComponentUpdate()에 구현할 수 없는 경우라면 새로운 state가 이전 state와 달라지는 경우에만 setState()를 호출하여 불필요한 재렌더링을 피할 수 있습니다.
  11. - I/F(인터페이스)로써의 Prop Prop은 외부에서 전달한 값이지 그 컴포넌트가 자체적으로 관리하는 값이 아니므로 내부에서 변경하면 안 됩니다.. 즉, Prop은 불변하며 외부와 I/F로써 작용합니다. 컴포넌트가 관리할 필요가 있는 값은 State로 정의해야 합니다. State는 Prop다음에 설명드리겠습니다.
  12. setProps()은 기존의 Prop과 새로운 Prop을 합칩니다.(merge) 그리고 각각 두 번째 인수에 콜백 함수를 지정할 수 있습니다.
  13. getInitialState()을 이용해 state의 초기값을 반환하고 데이터 변경이 있는 경우 this.setState()로 갱신합니다. 상태가 갱신되면 컴포넌트가 rerender 되어 UI가 갱신됩니다. 이때, 자식 컴포넌트도 함께 rerender 됩니다. setState()의 두 번째에 인수에는 setProps() 처럼 콜백 함수를 지정할 수 있습니다. state의 값을 프로퍼티로 접근해 직접 변경하면 안 되고 반드시 setState()를 사용해 갱신해야 합니다. 이는 setState()가 호출되어야 rerender 되기 때문입니다. this.state 값 자체도 Immutable 하다라고 생각하는 것이 좋습니다. 만약, this.state.list라는 배열이 있고 list에 요소를 추가하고 싶은 경우도 push()하고 setState()하는 것이 아니라 this.setState({list: this.state.list.concat([value]})로 새로운 값(배열)을 지정하는 것이 좋습니다. 이 방법이 shouldComponentUpdate()로 성능 최적화 할 때와 undo의 구현 시에 좀 더 유용합니다. - State는 최소화 Prop만 가지고 있는 Immutable한 컴포넌트가 조작하거나 이해하기 쉬우므로, 기본적으로는 Prop을 고려하고, State를 가진 컴포넌트는 최소화 하는 게 좋습니다. 최상위 컴포넌트만 State를 갖게 하고, 하위 컴포넌트는 전부 Prop만을 가지는 Immutable한 컴포넌트로 구성하여 어떤 변경이 있을 때 최상위 컴포넌트에서 setState()하여 rerender 하는 설계도 가능합니다.
  14. State의 초기값을 Prop에서 전달해야 하는 경우의 예시입니다. prop과 state는 컴포넌트에서 데이터와 상태를 관리하는 데 중요한 속성입니다.
  15. 자주 사용하는 메서드는 componenetDidMount()나 componentWillUnmount() 입니다. componentDidMount()에서 이벤트를 등록하고 componentWillUnmount()에서 이벤트를 해제하는 패턴을 많이 사용합니다. - componentWillMount() 컴포넌트가 DOM 트리에 추가되기 전 한 번만 호출됩니다. Server-side rendering 시에도 호출되므로 어느 쪽에서도 동작할 수 있는 코드를 작성해야합니다. DOM을 컨트롤 하는 브라우저에서만 동작하는 로직을 작성하면 안됩니다. Node.js 환경에서는 DOM이 없으므로 에러가 발생하게 됩니다. - componentDidMount() 컴포넌트가 DOM 트리에 추가된 상태에 호출됩니다. DOM과 관련된 초기화를 하고 싶을 때 편리하게 사용할 수 있습니다. componentWillMount()와 다른 게 Server-side rendering 시에 호출되지 않습니다. DOM을 다루는 처리 외에, Ajax 요청이나 setInterval 등의 Server-side rendering 시에는 불필요한 초기화 처리는 이 메서드를 통해 진행합니다. - shouldComponentUpdate() 이 메서드는 다른 메서드 Lifecycle 메서드와 달리 true나 false를 반환할 필요가 있습니다. 컴포넌트가 rerender 하기 전에 호출되며, 만약 false를 반환하면 VirtualDOM 비교를 하지 않고 rerender도 하지 않습니다. 즉, 독자적으로 Prop이나 State 비교 처리를 구현하는 것으로 불필요한 계산을 하지 않을 수 있습니다. 보통 성능 향상을 목적으로 사용합니다. 이 메서드가 반환하는 기본값은 true 이므로 재정의 하지 않으면 항상 rerender 합니다. 강제적으로 rerender 하고자 할땐 forceUpdate()를 사용합니다. forceUpdate()가 호출되는 경우엔 shouldComponentUpdate()는 호출되지 않습니다. - componentWillUnmount() 컴포넌트가 DOM에서 삭제될 때 호출됩니다. 이벤트 해제 같은 clean-up 처리 시 할 때 사용합니다. componentDidMount()에서 등록한 Timer의 처리나 DOM의 이벤트 등은 여기에서 해제해야 합니다.
  16. DEWS 숫자텍스트박스를 구현해보았는데 그 때, spinnerButton을 구현한게 생각나 React를 이용하여 spinnerButton을 구현해보았습니다.