SlideShare una empresa de Scribd logo
1 de 40
Reac
t
학습목
표
React개발환경,React속성등하나씩배워
가면서
간단한웹어플리케이션을만들어본다.
개발예
제
1. 왜React인가?
2. 개발환경구축
3. HelloWorld
4. JSX
5. ReactComponent
6. Props와State
7. ReactComponent의
Lifecycle
8. Event
9. StatelessComponent
10. PropTypes
목
차
1. 왜React인
가?
기존자바스크립트
• DOM을가져오고갱신하는작업은느림
• 상태가바뀔때마다페이지전체를렌더링하는애플리케이션의경우성능이떨
어짐
리액트
• 페이스북과 인스타그램에 적용하기 위해만들어짐
• 가상DOM을이용해서페이지에렌더링된전체DOM을읽음
• state와props값에변화가있으면해당되는부분만렌더링
• 리플로우나불필요한DOM조작을최소화하기때문에성능향상
• 가상돔의diff체크가리액트에서제공되는핵심기능
리액트와함께사용되는것
• 웹프레임워크를MVC로구분한다고했을때리액트는V(View)에해당
• 개발파일이많아짐에따라M(Model)에해당하는react-redux와
• C(Controller)에해당하는react-router를필요에따라추가로사용
2. 개발환경구
축
Git설치
• https://git-scm.com/downloads
NodeJs 설치
• https://nodejs.org/ko/download/
• lts 버전으로 설치
저장소clone
• git clonehttps://github.com/apple77y/todo_react.git
• template.html확인
2. 개발환경구
축
브랜치변경
• git checkout -b origin/00-devSetting
dependencies
• react: 리액트 컴포넌트를 만들어 주는모듈
• react-dom: 만들어진 컴포넌트를 실제 DOM에 붙여주는모듈
devDependencies
• babel-core: 트랜스파일을 해주는 모듈의코어
• babel-loader: 웹팩에서 loader로 babel 불러오기 위한모듈
• babel-preset-react: JSX로 개발된 파일을 일반 JS로 변환하기 위한
모듈
• react-hot-loader: 웹팩 개발 서버에서 HMR을 해줄모듈
• webpack: require(모듈화)를 사용하기 위해 쓰는모듈
• webpack-dev-server: 개발 서버를 사용하기 위해 쓰는모듈
실
습
HTML파일을생
성
• <div id=“app”></div> 요소에 리액트 컴포넌트가 그려질 예정
• bundle.js 파일이 웹팩으로 트랜스파일 된 빌드 산출물
<!DOCTYPE html>
<html lang=“en">
<head>
<meta charset=“UTF-8">
<title>Todo</title>
</head>
<body>
<div id=“app"></div>
<script src=“./dist/bundle.js"></script>
</body>
</html>
3. Hello
World
HelloWorld를HTML파일에출력
import React from ‘react';
import ReactDOM from 'react-dom';
if (module.hot) {
module.hot.accept();
}
ReactDOM.render(
<div>Hello World</div>, document.getElementById('app')
);
• ReactDOM은 React에 의존성을 가짐
• module.hot.accept는 개발용 HMR(Hot Module Replacement)를 위한 코드
4.
JSX
JSX=JavaScript+XML의약자
• HTML처럼 보이게 하는 효과
• 사용하지 않아도 되지만, 실제로는 사용할 수 밖에 없음
주의사항
• XML이라서 HTML처럼 루트가 꼭 있어야 됨
• 중괄호 안에서는 자바스크립트를 쓸 수있음
• 열림 태그와 닫힘 태그가 반드시 있음
• ex) <hr />, <input />, <br />
• 중괄호 안에서 조건문 if는 쓸 수 없음
• 로직 분리 혹은 삼항 연산자 사용을 추천
• 자바스크립트의 예약어와 겹치는 예약어는 다른 걸써
야됨
• div class -> className
• label for -> htmlFor
실
습
template.html의내용을jsx로
변환• index.html의head에css파일추가필요
실
습
상수값은변수로
추출
실
습
view의관심사별로
분리
5. React
Component
class…extendsReact.Component로생성
• 반환 값은 리액트객체
• 재사용 가능
• render 메소드를 통해 JSX를반환
• props와 state 사용 가능
• 제공되는 메소드
• ES5: getInitialState -> ES6: 생성자에서선언
• ES5: getDefaultProps -> ES6: 클래스 객체에 속성 추
가
• componentWillMount
• componentDidMount
• componentWillReceiveProps
• componentWillUpdate
• componentDidUpdate
• componentWillUnmount
• shouldComponentUpdate
• render 메소드는 필수 항목
실
습
AddLi.j
s
import React, {Component} from 'react';
class AddLi extends Component {
render() {
return (
<div className="input-group input-group-lg">
<input type="text" className="form-control" placeholder="할 일을
입력해주세요" />
<span className="input-group-btn">
<button className="btn btn-primary" type="button">등록</
button>
</span>
</div>
);
}
}
export default AddLi;
• export default를 해야 외부 파일에서 require로 접근 가능
실
습
Title.j
s
import React, {Component} from 'react';
const text = 'To do list'; class Title
extends Component {
render() {
return (
<div className="page-header">
<h1>{text}</h1>
</div>
);
}
}
export default Title;
실
습
TodoLi.j
s
import React, {Component} from 'react';
class TodoLi extends Component {
render() {
const TodoLi = todos.map((todo, i) => {
return (
<li key={'todo' + i}>
<span>{todo}</span>
<span className="btn-container"><a href="#">삭제</a></span>
</li>
);
});
return (
<div>
{TodoLi}
</div>
);
}
}
export default TodoLi;
실
습
App.j
s
idmportTitle from './component/Title'; import AddLi
from './component/AddLi'; import TodoLi from
'./component/TodoLi';
if (module.hot) {
module.hot.accept();
}
ReactDOM.render(
<div className="container">
<Title/>
<AddLi/>
<hr/>
<ul>
<TodoLi/>
</ul>
</div>,
document.getElementById('app')
);
• import라는 예약어로 export 된 모듈에 접근
실
습
container/Todo.j
s
class Todo extends Component {
render() {
return (
<div className="container">
<Title/>
<AddLi/>
<hr/>
<ul>
<TodoLi/>
</ul>
</div>
);
}
}
export default Todo;
• 역할에 따라 Container와 Component를 구분
6. Props와
State
Props
• 부모 컴포넌트로부터 받은 데이터
• 쓰기는 불가능. 읽기만 가능
• React.PropTypes를 통해 데이터 형(type) 체크가능
State
• 컴포넌트 안에서 변경이 가능한데이터
• 쓰기 가능
• state는 immutable하기 때문에 setState 메소드를 통해갱
신
• 컴포넌트는 state를 최소한으로사용
• state를 변경하는 로직은 Container에서 최대한담당
실
습
Todo.js:각컴포넌트로데이터를전
달
const text = 'To do list';
const todos = [ '이것도
해야 되고', '저것도
해야 되고', '그것도
해야 되고', '언제 다
하나'
];
class Todo extends Component {
render() {
return (
<div className="container">
<Title text={text} />
<AddLi/>
<hr/>
<ul>
<TodoLi todos={todos}/>
</ul>
</div>
);
}
}
• 전달 받을 props 이름 = {전달할 데이터}
실
습
Title.js:부모로부터전달받은데이터(this.props.text)를
출력
class Title extends Component {
render() {
return (
<div className="page-header">
<h1>{this.props.text}</h1>
</div>
);
}
}
실
습
TodoLi.js:부모로부터전달받은데이터(this.props.todos)를
출력
class TodoLi extends Component {
render() {
const TodoLi = this.props.todos.map((todo, i) => {
return (
<li key={'todo' + i}>
<span>{todo}</span>
<span className="btn-container"><a href="#">삭제</a></span>
</li>
);
});
return (
<div>
{TodoLi}
</div>
);
}
}
실
습
Todo.js:초기상수값을생성자에서관
리
class Todo extends Component {
constructor() {
this.state = {
text: 'To do list', todos: [
'이것도 해야 되고',
'저것도 해야 되고',
'그것도 해야 되고',
'언제 다 하나'
]
};
}
render() {
return (
<div className="container">
<Title text={this.state.text} />
<AddLi/>
<hr/>
<ul>
<TodoLi todos={this.state.todos}/>
</ul>
</div>
);
}
}
• ES6는 생성자 함수에서 초기 state 값 설정
실
습
Todo.js:todoLi반복문로직을컴포넌트가아닌컨테이너에서
수행
const todoLi = this.state.todos.map((todo, i) => {
return <TodoLi todo={todo} key={'todo' + i} />;
});
return (
<div className="container">
<Title text={this.state.text} />
<AddLi/>
<hr/>
<ul>
{todoLi}
</ul>
</div>
);
7.ReactComponent의
Lifecycle
컴포넌트의생명주기
• 리액트 컴포넌트가 DOM에 그려지는 과정을분리
• 그 과정(= 시점)들을 생명주기라부름
• props와 state 값이 바뀔 때마다 필요한 부분만 그려짐
• 생명주기 메소드는 총 7개
• https://facebook.github.io/react/docs/component-specs-ko-KR.html#생명주기-메소드
생명주기메소드의활용예
• componentDidMount에서의 ajax 호출
• componentWillUnmount에서의 이벤트 해제
실
습
Todo.js:컴포넌트생명주기를확
인
componentWillMount() {
console.log('componentWillMount');
}
componentDidMount() {
console.log('componentDidMount');
}
componentWillReceiveProps() {
console.log('componentWillReceiveProps');
}
componentWillUpdate() {
console.log('componentWillUpdate');
}
componentDidUpdate() {
console.log('componentDidUpdate');
}
componentWillUnmount() {
console.log(‘componentWillUnmount');
}
실
습
Todo.js:초기값을서버에서받아온다고
가정
constructor(props) {
super(props);
this.state = {
text: '',
todos: []
};
}
componentDidMount() {
const text = 'To do list'; const
todos = [
'이것도 해야 되고',
'저것도 해야 되고',
'그것도 해야 되고',
'언제 다 하나'
];
this.setState((prevState) => {
return {
text,
todos
};
});
}
• text, todos를 ajax로 받아왔다고 가정
8.
Event
이벤트처리
• DOM 이벤트 리스너는 카멜케이스로
• DOM을 다룰 때는 ref(reference) 속성을 이용해서 가상 DOM을 참
조
• native 혹은 jQuery로 DOM을 다룰 수 있지만 지양
• https://facebook.github.io/react/docs/more-about-refs-ko-KR.html
• 상위 컴포넌트로 데이터를 전달할 때에는 콜백 함수를 이용
실
습
AddLi.js:등록버튼을눌렀을때의이
벤트
onClickAddButton() {
this.props.handleAddedData(this.inputBox.value);
this.inputBox.value = '';
this.inputBox.focus();
}
render() {
return (
<div className="input-group input-group-lg">
<input type="text" className="form-control" placeholder="할 일을
입력해주세요"
ref={input => {this.inputBox = input;}}/>
<span className="input-group-btn">
<button className="btn btn-primary" type="button"
onClick={this.onClickAddButton}>등록</button>
</span>
</div>
);
}
실
습
Todo.js:컨테이너의콜백함수에서데이터
수신
constructor() {
this.handleAddedData = this.handleAddedData.bind(this);
}
handleAddedData(text) {
this.setState((prevState) => { const
{todos} = prevState;
todos.push(text);
return {todos};
});
}
render: function () {
return (
<div className="container">
<Title text={this.state.text}/>
<AddLi handleAddedData={this.handleAddedData} />
<hr/>
<ul>
{todoLi}
</ul>
</div>
);
}
• state의 데이터는 immutable하기 때문에 새로운 객체를 참조
실
습
TodoLi.js:삭제버튼을눌렀을때의이
벤트
class TodoLi extends Component {
constructor(props) {
super(props);
this.onClickRemoveButton = this.onClickRemoveButton.bind(this);
}
onClickRemoveButton() {
this.props.handleRemovedData(this.props.todo);
}
render() {
return (
<li>
<span>{this.props.todo}</span>
<span className="btn-container">
<a href="#" onClick={this.onClickRemoveButton}>삭제</a>
</span>
</li>
);
}
}
실
습
Todo.js:컨테이너의콜백함수에서데이터
수신
constructor() {
this.handleRemovedData = this.handleRemovedData.bind(this);
}
handleRemovedData(text) {
this.setState((prevState) => {
const {todos} = prevState;
const index = todos.indexOf(text);
todos.splice(index, 1);
return {todos};
})
}
render: function () {
var todoLi = this.state.todos.map(function (todo, i) {
return <TodoLi todo={todo} key={'todo' + i}
handleRemovedData={this.handleRemovedData}/>;
});
}
• state의 데이터는 immutable하기 때문에 새로운 객체를 참조
9. Stateless
Component
상태값이없는컴포넌트
• 페이스북에서 지향하는 컴포넌트 방향
• 재활용하기 쉬움
• 리액트 코어 내에서도 빠른 경로 = 성능 이점
• 단, 컴포넌트 내에서 this.state, 생성주기 함수, ref 사용이 없어야 됨
• https://facebook.github.io/react/docs/reusable-components-ko-KR.html#상태를-가지지-않는-함수
실
습
Title.js:순수함수형태로리팩토
링
import React from 'react';
const Title = ({text}) => (
<div className="page-header">
<h1>{text}</h1>
</div>
);
export default Title;
실
습
TodoLi.js:순수함수형태로리팩토
링
import React from 'react';
const TodoLi = ({handleRemovedData, todo}) => {
const onClickRemoveButton = () => {
handleRemovedData(todo);
};
return (
<li>
<span>{todo}</span>
<span className="btn-container">
<a href="#" onClick={onClickRemoveButton}>삭제</a>
</span>
</li>
);
};
export default TodoLi;
10.
PropTypes
Prop검증
• 부모로부터 받은 데이터의 형(type)이 올바른지체
크
• 개발 모드에서만 검사 수행됨
검증가능한형(type)사용예
• 배열: PropTypes.array
• 불리언: PropTypes.bool
• 함수: PropTypes.func
• 숫자: PropTypes.number
• 객체: PropTypes.object
• 문자: PropTypes.string
• 필수 값은 isRequired를 붙임
실
습
Title.js:객체의속성값으로propTypes을
주입
import PropTypes from 'prop-types';
const Title = ({text}) => (
(……생략)
);
Title.propTypes = {
text: PropTypes.string
};
• text의 값으로 string이 아닌 number가 넘어왔을 경우
실
습
AddLi.js:객체의속성값으로propTypes을
주입
import PropTypes from 'prop-types';
class AddLi extends Component { (……
생략)
}
AddLi.propTypes = {
handleAddedData: PropTypes.func.isRequired
};
• 필수 값이 안 넘어왔을 경우
실
습
TodoLi:객체의속성값으로propTypes을
주입
import PropTypes from 'prop-types';
const TodoLi = ({handleRemovedData, todo}) => { (……생략)
};
TodoLi.propTypes = {
handleRemovedData: React.PropTypes.func.isRequired, todo:
React.PropTypes.string.isRequired
};
• handleRemovedData의 값으로 func 대신 string이 넘어왔을 경우

Más contenido relacionado

La actualidad más candente

iOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScriptiOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScriptCheolhee Han
 
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.병대 손
 
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여Jin wook
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱NAVER D2
 
AngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJSAngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJSKenneth Ceyer
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - PolymerJae Sung Park
 
Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드NAVER D2
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XpressEngine
 
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기Gyutae Jo
 
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기Jeado Ko
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기Jeado Ko
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Kim Hunmin
 
[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우NAVER D2
 
Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발Jin wook
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Appsjungkees
 
Vue SSR vs Prerender
Vue SSR vs PrerenderVue SSR vs Prerender
Vue SSR vs PrerenderChangwan Jun
 
React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기WebFrameworks
 
다시보는 Angular js
다시보는 Angular js다시보는 Angular js
다시보는 Angular jsJeado Ko
 

La actualidad más candente (20)

iOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScriptiOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScript
 
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
 
Deview2013 track1 session7
Deview2013 track1 session7Deview2013 track1 session7
Deview2013 track1 session7
 
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱
 
AngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJSAngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJS
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer
 
Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드Angularjs 도입 선택 가이드
Angularjs 도입 선택 가이드
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
 
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
 
역시 Redux
역시 Redux역시 Redux
역시 Redux
 
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우
 
Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
Vue SSR vs Prerender
Vue SSR vs PrerenderVue SSR vs Prerender
Vue SSR vs Prerender
 
React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기
 
다시보는 Angular js
다시보는 Angular js다시보는 Angular js
다시보는 Angular js
 

Similar a [Codelab 2017] ReactJS 기초

Node.js and react
Node.js and reactNode.js and react
Node.js and reactHyungKuIm
 
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modificationSecrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modificationHyuncheol Jeon
 
[React-Native-Seoul] React-Native 초심자를 위한 실습위주의 간단한 소개 및 구현법 안내
[React-Native-Seoul] React-Native 초심자를 위한 실습위주의 간단한 소개 및 구현법 안내[React-Native-Seoul] React-Native 초심자를 위한 실습위주의 간단한 소개 및 구현법 안내
[React-Native-Seoul] React-Native 초심자를 위한 실습위주의 간단한 소개 및 구현법 안내Tae-Seong Park
 
React 실무활용 이야기
React 실무활용 이야기React 실무활용 이야기
React 실무활용 이야기철민 배
 
Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기Jiam Seo
 
Web Components - Part.I, @KIG 30th
Web Components - Part.I, @KIG 30thWeb Components - Part.I, @KIG 30th
Web Components - Part.I, @KIG 30thChang W. Doh
 
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)LanarkSeung
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Kyoung Up Jung
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기Taegon Kim
 
JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본Myungjin Lee
 
Dependency Injection 소개
Dependency Injection 소개Dependency Injection 소개
Dependency Injection 소개beom kyun choi
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GDG Korea
 
Polymer따라잡기
Polymer따라잡기Polymer따라잡기
Polymer따라잡기Han Jung Hyun
 
Hacosa js study 4주차
Hacosa js study 4주차Hacosa js study 4주차
Hacosa js study 4주차Seong Bong Ji
 

Similar a [Codelab 2017] ReactJS 기초 (20)

Node.js and react
Node.js and reactNode.js and react
Node.js and react
 
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modificationSecrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
 
[React-Native-Seoul] React-Native 초심자를 위한 실습위주의 간단한 소개 및 구현법 안내
[React-Native-Seoul] React-Native 초심자를 위한 실습위주의 간단한 소개 및 구현법 안내[React-Native-Seoul] React-Native 초심자를 위한 실습위주의 간단한 소개 및 구현법 안내
[React-Native-Seoul] React-Native 초심자를 위한 실습위주의 간단한 소개 및 구현법 안내
 
React 실무활용 이야기
React 실무활용 이야기React 실무활용 이야기
React 실무활용 이야기
 
Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기Meteor React Tutorial 따라하기
Meteor React Tutorial 따라하기
 
Web Components - Part.I, @KIG 30th
Web Components - Part.I, @KIG 30thWeb Components - Part.I, @KIG 30th
Web Components - Part.I, @KIG 30th
 
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
Create-React-App으로 SSR을 구현하며 배운 점 (feat. TypeScript)
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
 
react-ko.pdf
react-ko.pdfreact-ko.pdf
react-ko.pdf
 
Hacosa jquery 1th
Hacosa jquery 1thHacosa jquery 1th
Hacosa jquery 1th
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기
 
3-2. selector api
3-2. selector api3-2. selector api
3-2. selector api
 
JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본
 
Dependency Injection 소개
Dependency Injection 소개Dependency Injection 소개
Dependency Injection 소개
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
 
Polymer따라잡기
Polymer따라잡기Polymer따라잡기
Polymer따라잡기
 
Hacosa js study 4주차
Hacosa js study 4주차Hacosa js study 4주차
Hacosa js study 4주차
 
4-2. ajax
4-2. ajax4-2. ajax
4-2. ajax
 

Más de 양재동 코드랩

T13_2_이은호_비개발자 대표의 3개월 서비스 개발기
T13_2_이은호_비개발자 대표의 3개월 서비스 개발기T13_2_이은호_비개발자 대표의 3개월 서비스 개발기
T13_2_이은호_비개발자 대표의 3개월 서비스 개발기양재동 코드랩
 
T11_1_한종원_20181126 AWS S3, SPA, 그리고 Vue.JS - HBSmith는 어떻게 Fron...
T11_1_한종원_20181126 AWS S3, SPA, 그리고 Vue.JS - HBSmith는 어떻게 Fron...T11_1_한종원_20181126 AWS S3, SPA, 그리고 Vue.JS - HBSmith는 어떻게 Fron...
T11_1_한종원_20181126 AWS S3, SPA, 그리고 Vue.JS - HBSmith는 어떻게 Fron...양재동 코드랩
 
T13_1_김건_오픈소스 컨트리뷰션 101
T13_1_김건_오픈소스 컨트리뷰션 101T13_1_김건_오픈소스 컨트리뷰션 101
T13_1_김건_오픈소스 컨트리뷰션 101양재동 코드랩
 
T11-2 장기효_Progressive Web Apps - 미래가 아닌 현재
T11-2 장기효_Progressive Web Apps - 미래가 아닌 현재T11-2 장기효_Progressive Web Apps - 미래가 아닌 현재
T11-2 장기효_Progressive Web Apps - 미래가 아닌 현재양재동 코드랩
 
[Codelab 2017] Ionic Framework을 통한 하이브리드앱 개발하기
[Codelab 2017] Ionic Framework을 통한 하이브리드앱 개발하기[Codelab 2017] Ionic Framework을 통한 하이브리드앱 개발하기
[Codelab 2017] Ionic Framework을 통한 하이브리드앱 개발하기양재동 코드랩
 
[Codelab 2017] Docker 기초 및 활용 방안
[Codelab 2017] Docker 기초 및 활용 방안[Codelab 2017] Docker 기초 및 활용 방안
[Codelab 2017] Docker 기초 및 활용 방안양재동 코드랩
 
[W3C HTML5 2016] Univeral Rendering
[W3C HTML5 2016] Univeral Rendering[W3C HTML5 2016] Univeral Rendering
[W3C HTML5 2016] Univeral Rendering양재동 코드랩
 
[W3C HTML5 2016] Ionic 하이브리드 앱 개발하기, 사례와 시사점
[W3C HTML5 2016] Ionic 하이브리드 앱 개발하기, 사례와 시사점[W3C HTML5 2016] Ionic 하이브리드 앱 개발하기, 사례와 시사점
[W3C HTML5 2016] Ionic 하이브리드 앱 개발하기, 사례와 시사점양재동 코드랩
 
[W3C HTML5 2016] 컨테이너와 웹 어플리케이션
[W3C HTML5 2016] 컨테이너와 웹 어플리케이션[W3C HTML5 2016] 컨테이너와 웹 어플리케이션
[W3C HTML5 2016] 컨테이너와 웹 어플리케이션양재동 코드랩
 
[W3C HTML5 2016] 일렉트론, 웹 기술로 담아내는 데스크탑 애플리케이션
[W3C HTML5 2016] 일렉트론, 웹 기술로 담아내는 데스크탑 애플리케이션[W3C HTML5 2016] 일렉트론, 웹 기술로 담아내는 데스크탑 애플리케이션
[W3C HTML5 2016] 일렉트론, 웹 기술로 담아내는 데스크탑 애플리케이션양재동 코드랩
 
[W3C HTML5 2017] Electron과 TypeScript로 만드는 Visual Studio Code, 그리고 ProtoPie
[W3C HTML5 2017] Electron과 TypeScript로 만드는 Visual Studio Code, 그리고 ProtoPie[W3C HTML5 2017] Electron과 TypeScript로 만드는 Visual Studio Code, 그리고 ProtoPie
[W3C HTML5 2017] Electron과 TypeScript로 만드는 Visual Studio Code, 그리고 ProtoPie양재동 코드랩
 
[W3C HTML5 2017] Docker & DevOps에서 Serverless & NoOps로의 여정
[W3C HTML5 2017] Docker & DevOps에서 Serverless & NoOps로의 여정[W3C HTML5 2017] Docker & DevOps에서 Serverless & NoOps로의 여정
[W3C HTML5 2017] Docker & DevOps에서 Serverless & NoOps로의 여정양재동 코드랩
 
[W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js
[W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js [W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js
[W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js 양재동 코드랩
 

Más de 양재동 코드랩 (14)

T13_2_이은호_비개발자 대표의 3개월 서비스 개발기
T13_2_이은호_비개발자 대표의 3개월 서비스 개발기T13_2_이은호_비개발자 대표의 3개월 서비스 개발기
T13_2_이은호_비개발자 대표의 3개월 서비스 개발기
 
T11_1_한종원_20181126 AWS S3, SPA, 그리고 Vue.JS - HBSmith는 어떻게 Fron...
T11_1_한종원_20181126 AWS S3, SPA, 그리고 Vue.JS - HBSmith는 어떻게 Fron...T11_1_한종원_20181126 AWS S3, SPA, 그리고 Vue.JS - HBSmith는 어떻게 Fron...
T11_1_한종원_20181126 AWS S3, SPA, 그리고 Vue.JS - HBSmith는 어떻게 Fron...
 
T13_1_김건_오픈소스 컨트리뷰션 101
T13_1_김건_오픈소스 컨트리뷰션 101T13_1_김건_오픈소스 컨트리뷰션 101
T13_1_김건_오픈소스 컨트리뷰션 101
 
T11-2 장기효_Progressive Web Apps - 미래가 아닌 현재
T11-2 장기효_Progressive Web Apps - 미래가 아닌 현재T11-2 장기효_Progressive Web Apps - 미래가 아닌 현재
T11-2 장기효_Progressive Web Apps - 미래가 아닌 현재
 
[Codelab 2017] Ionic Framework을 통한 하이브리드앱 개발하기
[Codelab 2017] Ionic Framework을 통한 하이브리드앱 개발하기[Codelab 2017] Ionic Framework을 통한 하이브리드앱 개발하기
[Codelab 2017] Ionic Framework을 통한 하이브리드앱 개발하기
 
[Codelab 2017] Docker 기초 및 활용 방안
[Codelab 2017] Docker 기초 및 활용 방안[Codelab 2017] Docker 기초 및 활용 방안
[Codelab 2017] Docker 기초 및 활용 방안
 
[W3C HTML5 2016] Angular + ES6
[W3C HTML5 2016] Angular + ES6[W3C HTML5 2016] Angular + ES6
[W3C HTML5 2016] Angular + ES6
 
[W3C HTML5 2016] Univeral Rendering
[W3C HTML5 2016] Univeral Rendering[W3C HTML5 2016] Univeral Rendering
[W3C HTML5 2016] Univeral Rendering
 
[W3C HTML5 2016] Ionic 하이브리드 앱 개발하기, 사례와 시사점
[W3C HTML5 2016] Ionic 하이브리드 앱 개발하기, 사례와 시사점[W3C HTML5 2016] Ionic 하이브리드 앱 개발하기, 사례와 시사점
[W3C HTML5 2016] Ionic 하이브리드 앱 개발하기, 사례와 시사점
 
[W3C HTML5 2016] 컨테이너와 웹 어플리케이션
[W3C HTML5 2016] 컨테이너와 웹 어플리케이션[W3C HTML5 2016] 컨테이너와 웹 어플리케이션
[W3C HTML5 2016] 컨테이너와 웹 어플리케이션
 
[W3C HTML5 2016] 일렉트론, 웹 기술로 담아내는 데스크탑 애플리케이션
[W3C HTML5 2016] 일렉트론, 웹 기술로 담아내는 데스크탑 애플리케이션[W3C HTML5 2016] 일렉트론, 웹 기술로 담아내는 데스크탑 애플리케이션
[W3C HTML5 2016] 일렉트론, 웹 기술로 담아내는 데스크탑 애플리케이션
 
[W3C HTML5 2017] Electron과 TypeScript로 만드는 Visual Studio Code, 그리고 ProtoPie
[W3C HTML5 2017] Electron과 TypeScript로 만드는 Visual Studio Code, 그리고 ProtoPie[W3C HTML5 2017] Electron과 TypeScript로 만드는 Visual Studio Code, 그리고 ProtoPie
[W3C HTML5 2017] Electron과 TypeScript로 만드는 Visual Studio Code, 그리고 ProtoPie
 
[W3C HTML5 2017] Docker & DevOps에서 Serverless & NoOps로의 여정
[W3C HTML5 2017] Docker & DevOps에서 Serverless & NoOps로의 여정[W3C HTML5 2017] Docker & DevOps에서 Serverless & NoOps로의 여정
[W3C HTML5 2017] Docker & DevOps에서 Serverless & NoOps로의 여정
 
[W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js
[W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js [W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js
[W3C HTML5 2017] 예제를 통해 쉽게 살펴보는 Vue.js
 

[Codelab 2017] ReactJS 기초