SlideShare a Scribd company logo
Redux and Redux saga
안재용,help@birdsfree.com
Redux 는?
액션으로 스테이트를 변경해주는 역할.
리덕스는 크게
이렇게 구성되어 있음 Action, Reducer , Store
-Action: 어떤 행동을 하기 위한 단순히 객체데이터 e.g: { type: 액션이름 , 변수: ..,
변수.. }특징으로는 항상 type 이라는 곳에 액션 고유 이름을 선언한 다는 것. (이것
으로 액션을 보낼 곳에서 어떤 액션이 들어왔는지 인식함)
첫 번째, Action
-Action: 어떤 행동을 하기 위한 단순히 객체데이터 e.g: { type: 액션이름 , 변수: ..,
변수.. }특징으로는 항상 type 이라는 곳에 액션 고유 이름을 선언한 다는 것. (이것
으로 액션을 보낼 곳에서 어떤 액션이 들어왔는지 인식함)
여기서 중요한 것은 간혹 코드에 보이는 Type safe를 위해서 사용된 코드와는 상관
없는 type 임. 그저 액션에 대한 고유한 명을 전달하기 위해서 정해진 type이라는
key,value 의 key 값임
두 번째, Reducer
리듀서는 그저 이전에 있던 state 를 새로운 state 로 변경 해주는 역할.
예를 들어서 이전 state 가 {myName : “i’m crazy” } 고 내가 원하는 것은 이 스테이
트를 변경하고자 하면{myName:”i’m not crazy” yourName:”you are crazy”} 라고
바꾸는 역할이 reducer 의 역할.
코드에서 선언은 보통 이렇게 되어있음. (이그나이트의 redux 폴더 참고).
export const request = (state: Object) => state.merge({ fetching: true })
이전 state 가 저렇게 들어오면 fetching 이라는 새로운 값을 이전 스테이트
(state:Object) 에 저장해서 넘겨줌.
두 번째, Reducer
리듀서는 앞서 말한 것처럼 저렇게 스테이트 변경을 선언한 뒤에,
export const reducer = createReducer(INITIAL_STATE, {
[Types.LOGIN_REQUEST]: request,
[Types.LOGIN_SUCCESS]: success,
[Types.LOGIN_FAILURE]: failure,
[Types.LOGOUT]: logout
})
이렇게 action 과 매칭해 줘야됨. Types.LOGIN_REQUEST 는 action 을 라이브러리
써서 상수화 한 녀석인데 저 상수 안에는 { type: “login_request_unique”} 같은 값
이 들어있겠다는 것을 대충 예측할 수 있음. 저렇게 상수화 하는 이유는 당연히 위
처럼 key,value 값으로 이루어진 배열로 액션을 계속 호출하기 불편하기 때문임.
여기서 잠깐, ActionCreater 에 대해서 알아보자
(redux/LoginRedux.js 상단 참고) 아래는 액션 선언 코드.
export const reducer = createReducer(INITIAL_STATE, {
[Types.LOGIN_REQUEST]: request,
[Types.LOGIN_SUCCESS]: success,
[Types.LOGIN_FAILURE]: failure,
[Types.LOGOUT]: logout
})
Types.LOGIN_REQUEST 라는 액션상수를 만들어 주는 library 가 있
음.(/Redux/LoginRedux.js 제일 상단 임포트 참고)
import { createReducer, createActions } from 'reduxsauce'
바로 위 코드에 createActions 임.
여기서 잠깐, ActionCreater 에 대해서 알아보자
아래 예제 코드를 분석하면
const { Types, Creators } = createActions({
loginRequest: ['username', 'password'],
loginSuccess: ['username'],
loginFailure: ['error'],
logout: null
})
export const LoginTypes = Types
export default Creators
createAction을 사용해서 위 결과물이 Types.LOGIN_REQUEST 라는 Action 상수가
만들어지는데, createActions 의 loginRequest:[‘username’,’password’] 는 원래
Types.LOGIN_REQUEST ={ type: ‘loginRequest’ username:”” password:””}
이랑 같음. 상수에다가 저렇게 액션을 매칭해서 만들어 줌.
마지막 store
store 는 별거 없음. reducer 랑 action 을 선언한 뒤에 보통
이렇게 매칭해주는데
export const reducer = createReducer(INITIAL_STATE, {
[Types.LOGIN_REQUEST]: request,
[Types.LOGIN_SUCCESS]: success,
[Types.LOGIN_FAILURE]: failure,
[Types.LOGOUT]: logout
})
만들어둔 리듀서랑 액션은 액션상수:리듀서 로 위처럼 매칭함. 그리고 createReducer
로 리듀서를 만들고 , 위 리듀서는 INITIAL_STATE를 액션에 따라서 리듀서를 호출해서
변경해주는 것임.
마지막 store
store 는 간단함. reducer 랑 action 을 선언한 뒤에 보통
이렇게 매칭해주는데 (redux/LoginRedux.js 참고)
export const reducer = createReducer(INITIAL_STATE, {
[Types.LOGIN_REQUEST]: request,
[Types.LOGIN_SUCCESS]: success,
[Types.LOGIN_FAILURE]: failure,
[Types.LOGOUT]: logout
})
만들어둔 리듀서랑 액션은 액션상수:리듀서 로 위처럼 매칭함. 그리고 createReducer
로 리듀서를 만들고 , 위 리듀서는 INITIAL_STATE를 액션에 따라서 리듀서를 호출해서
변경해주는 것임.
마지막 store
만들어진 reducer들은 아래처럼 루트리듀서로 합치고, 그 뒤에 이 리듀서를 store 에
넣는 것임.
export default () => {
/* ------------- Assemble The Reducers ------------- */
const rootReducer = combineReducers({
temperature: require('./TemperatureRedux').reducer,
login: require('./LoginRedux').reducer,
search: require('./SearchRedux').reducer,
})
return configureStore(rootReducer, rootSaga)
}
마지막 store
그 뒤 우리는 다양한 리엑트 컨퍼넌트에서 store 에다가 액션을 던지면(dispatch를 이
용해서 던짐.)
그 store에서 우리가 만든 rootReducer 가 그 액션을 감지하고, 매칭되어 있는
Reducer를 호출 하는 것임.!!
Redux End!!
그 다음은 Redux saga 를 설명함.

More Related Content

What's hot

[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
Jeado Ko
 
06.실행환경 실습교재(easy company,해답)
06.실행환경 실습교재(easy company,해답)06.실행환경 실습교재(easy company,해답)
06.실행환경 실습교재(easy company,해답)
Hankyo
 
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
병대 손
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)
Hankyo
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기
Taegon Kim
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
Jeado Ko
 
정적 컨텐츠 제너레이터 GatsbyJS에 대해서 알아봅시다.
정적 컨텐츠 제너레이터 GatsbyJS에 대해서 알아봅시다.정적 컨텐츠 제너레이터 GatsbyJS에 대해서 알아봅시다.
정적 컨텐츠 제너레이터 GatsbyJS에 대해서 알아봅시다.
Kenneth Ceyer
 
Deep dive into Modern frameworks - HTML5 Forum 2018
Deep dive into Modern frameworks - HTML5 Forum 2018Deep dive into Modern frameworks - HTML5 Forum 2018
Deep dive into Modern frameworks - HTML5 Forum 2018
Kenneth Ceyer
 
Flux 예제 분석 2
Flux 예제 분석 2Flux 예제 분석 2
Flux 예제 분석 2
Peter YoungSik Yun
 
Promise and Bluebird
Promise and BluebirdPromise and Bluebird
Promise and Bluebird
Daniel Ku
 
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여
Jin wook
 
다시보는 Angular js
다시보는 Angular js다시보는 Angular js
다시보는 Angular js
Jeado Ko
 
iOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScriptiOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScript
Cheolhee Han
 
GraphQL overview #2
GraphQL overview #2GraphQL overview #2
GraphQL overview #2
기동 이
 
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
Hyuncheol Jeon
 
GraphQL overview
GraphQL overviewGraphQL overview
GraphQL overview
기동 이
 
[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
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GDG Korea
 

What's hot (18)

[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
 
06.실행환경 실습교재(easy company,해답)
06.실행환경 실습교재(easy company,해답)06.실행환경 실습교재(easy company,해답)
06.실행환경 실습교재(easy company,해답)
 
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
 
정적 컨텐츠 제너레이터 GatsbyJS에 대해서 알아봅시다.
정적 컨텐츠 제너레이터 GatsbyJS에 대해서 알아봅시다.정적 컨텐츠 제너레이터 GatsbyJS에 대해서 알아봅시다.
정적 컨텐츠 제너레이터 GatsbyJS에 대해서 알아봅시다.
 
Deep dive into Modern frameworks - HTML5 Forum 2018
Deep dive into Modern frameworks - HTML5 Forum 2018Deep dive into Modern frameworks - HTML5 Forum 2018
Deep dive into Modern frameworks - HTML5 Forum 2018
 
Flux 예제 분석 2
Flux 예제 분석 2Flux 예제 분석 2
Flux 예제 분석 2
 
Promise and Bluebird
Promise and BluebirdPromise and Bluebird
Promise and Bluebird
 
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여
 
다시보는 Angular js
다시보는 Angular js다시보는 Angular js
다시보는 Angular js
 
iOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScriptiOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScript
 
GraphQL overview #2
GraphQL overview #2GraphQL overview #2
GraphQL overview #2
 
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
 
GraphQL overview
GraphQL overviewGraphQL overview
GraphQL overview
 
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
 

Similar to Redux and redux saga

안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트
병한 유
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019min woog kim
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
NAVER Engineering
 
레거시 시스템에 Django 들이밀기
레거시 시스템에 Django 들이밀기레거시 시스템에 Django 들이밀기
레거시 시스템에 Django 들이밀기
Jiyong Jung
 
CRUD Pattern in Ajax
CRUD Pattern in AjaxCRUD Pattern in Ajax
CRUD Pattern in Ajax
Rhio Kim
 
Dependency Injection 소개
Dependency Injection 소개Dependency Injection 소개
Dependency Injection 소개
beom kyun choi
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.
Kyoung Up Jung
 
Secrets of the JavaScript Ninja - Chapter 3. Functions are Fundamental
Secrets of the JavaScript Ninja - Chapter 3. Functions are FundamentalSecrets of the JavaScript Ninja - Chapter 3. Functions are Fundamental
Secrets of the JavaScript Ninja - Chapter 3. Functions are Fundamental
Hyuncheol Jeon
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
Ryan Park
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
흥배 최
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
기동 이
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initialization
Eunjoo Im
 
Bug sense 분석
Bug sense 분석Bug sense 분석
Bug sense 분석
logdog
 

Similar to Redux and redux saga (14)

안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
 
레거시 시스템에 Django 들이밀기
레거시 시스템에 Django 들이밀기레거시 시스템에 Django 들이밀기
레거시 시스템에 Django 들이밀기
 
CRUD Pattern in Ajax
CRUD Pattern in AjaxCRUD Pattern in Ajax
CRUD Pattern in Ajax
 
Dependency Injection 소개
Dependency Injection 소개Dependency Injection 소개
Dependency Injection 소개
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.
 
Secrets of the JavaScript Ninja - Chapter 3. Functions are Fundamental
Secrets of the JavaScript Ninja - Chapter 3. Functions are FundamentalSecrets of the JavaScript Ninja - Chapter 3. Functions are Fundamental
Secrets of the JavaScript Ninja - Chapter 3. Functions are Fundamental
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
 
W14 chap13
W14 chap13W14 chap13
W14 chap13
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initialization
 
Bug sense 분석
Bug sense 분석Bug sense 분석
Bug sense 분석
 

Redux and redux saga

  • 1. Redux and Redux saga 안재용,help@birdsfree.com
  • 2. Redux 는? 액션으로 스테이트를 변경해주는 역할. 리덕스는 크게 이렇게 구성되어 있음 Action, Reducer , Store -Action: 어떤 행동을 하기 위한 단순히 객체데이터 e.g: { type: 액션이름 , 변수: .., 변수.. }특징으로는 항상 type 이라는 곳에 액션 고유 이름을 선언한 다는 것. (이것 으로 액션을 보낼 곳에서 어떤 액션이 들어왔는지 인식함)
  • 3. 첫 번째, Action -Action: 어떤 행동을 하기 위한 단순히 객체데이터 e.g: { type: 액션이름 , 변수: .., 변수.. }특징으로는 항상 type 이라는 곳에 액션 고유 이름을 선언한 다는 것. (이것 으로 액션을 보낼 곳에서 어떤 액션이 들어왔는지 인식함) 여기서 중요한 것은 간혹 코드에 보이는 Type safe를 위해서 사용된 코드와는 상관 없는 type 임. 그저 액션에 대한 고유한 명을 전달하기 위해서 정해진 type이라는 key,value 의 key 값임
  • 4. 두 번째, Reducer 리듀서는 그저 이전에 있던 state 를 새로운 state 로 변경 해주는 역할. 예를 들어서 이전 state 가 {myName : “i’m crazy” } 고 내가 원하는 것은 이 스테이 트를 변경하고자 하면{myName:”i’m not crazy” yourName:”you are crazy”} 라고 바꾸는 역할이 reducer 의 역할. 코드에서 선언은 보통 이렇게 되어있음. (이그나이트의 redux 폴더 참고). export const request = (state: Object) => state.merge({ fetching: true }) 이전 state 가 저렇게 들어오면 fetching 이라는 새로운 값을 이전 스테이트 (state:Object) 에 저장해서 넘겨줌.
  • 5. 두 번째, Reducer 리듀서는 앞서 말한 것처럼 저렇게 스테이트 변경을 선언한 뒤에, export const reducer = createReducer(INITIAL_STATE, { [Types.LOGIN_REQUEST]: request, [Types.LOGIN_SUCCESS]: success, [Types.LOGIN_FAILURE]: failure, [Types.LOGOUT]: logout }) 이렇게 action 과 매칭해 줘야됨. Types.LOGIN_REQUEST 는 action 을 라이브러리 써서 상수화 한 녀석인데 저 상수 안에는 { type: “login_request_unique”} 같은 값 이 들어있겠다는 것을 대충 예측할 수 있음. 저렇게 상수화 하는 이유는 당연히 위 처럼 key,value 값으로 이루어진 배열로 액션을 계속 호출하기 불편하기 때문임.
  • 6. 여기서 잠깐, ActionCreater 에 대해서 알아보자 (redux/LoginRedux.js 상단 참고) 아래는 액션 선언 코드. export const reducer = createReducer(INITIAL_STATE, { [Types.LOGIN_REQUEST]: request, [Types.LOGIN_SUCCESS]: success, [Types.LOGIN_FAILURE]: failure, [Types.LOGOUT]: logout }) Types.LOGIN_REQUEST 라는 액션상수를 만들어 주는 library 가 있 음.(/Redux/LoginRedux.js 제일 상단 임포트 참고) import { createReducer, createActions } from 'reduxsauce' 바로 위 코드에 createActions 임.
  • 7. 여기서 잠깐, ActionCreater 에 대해서 알아보자 아래 예제 코드를 분석하면 const { Types, Creators } = createActions({ loginRequest: ['username', 'password'], loginSuccess: ['username'], loginFailure: ['error'], logout: null }) export const LoginTypes = Types export default Creators createAction을 사용해서 위 결과물이 Types.LOGIN_REQUEST 라는 Action 상수가 만들어지는데, createActions 의 loginRequest:[‘username’,’password’] 는 원래 Types.LOGIN_REQUEST ={ type: ‘loginRequest’ username:”” password:””} 이랑 같음. 상수에다가 저렇게 액션을 매칭해서 만들어 줌.
  • 8. 마지막 store store 는 별거 없음. reducer 랑 action 을 선언한 뒤에 보통 이렇게 매칭해주는데 export const reducer = createReducer(INITIAL_STATE, { [Types.LOGIN_REQUEST]: request, [Types.LOGIN_SUCCESS]: success, [Types.LOGIN_FAILURE]: failure, [Types.LOGOUT]: logout }) 만들어둔 리듀서랑 액션은 액션상수:리듀서 로 위처럼 매칭함. 그리고 createReducer 로 리듀서를 만들고 , 위 리듀서는 INITIAL_STATE를 액션에 따라서 리듀서를 호출해서 변경해주는 것임.
  • 9. 마지막 store store 는 간단함. reducer 랑 action 을 선언한 뒤에 보통 이렇게 매칭해주는데 (redux/LoginRedux.js 참고) export const reducer = createReducer(INITIAL_STATE, { [Types.LOGIN_REQUEST]: request, [Types.LOGIN_SUCCESS]: success, [Types.LOGIN_FAILURE]: failure, [Types.LOGOUT]: logout }) 만들어둔 리듀서랑 액션은 액션상수:리듀서 로 위처럼 매칭함. 그리고 createReducer 로 리듀서를 만들고 , 위 리듀서는 INITIAL_STATE를 액션에 따라서 리듀서를 호출해서 변경해주는 것임.
  • 10. 마지막 store 만들어진 reducer들은 아래처럼 루트리듀서로 합치고, 그 뒤에 이 리듀서를 store 에 넣는 것임. export default () => { /* ------------- Assemble The Reducers ------------- */ const rootReducer = combineReducers({ temperature: require('./TemperatureRedux').reducer, login: require('./LoginRedux').reducer, search: require('./SearchRedux').reducer, }) return configureStore(rootReducer, rootSaga) }
  • 11. 마지막 store 그 뒤 우리는 다양한 리엑트 컨퍼넌트에서 store 에다가 액션을 던지면(dispatch를 이 용해서 던짐.) 그 store에서 우리가 만든 rootReducer 가 그 액션을 감지하고, 매칭되어 있는 Reducer를 호출 하는 것임.!! Redux End!! 그 다음은 Redux saga 를 설명함.