[Pre Onboarding] 8월 26일
뷰(화면)과 모델(데이터)을 연결하는 것을 의미
jQuery나 DOM API로 DOM에 직접 접근하여, 데이터를 화면에 데이터를 보여주려면,
$('p').text(unreadCount);
tag가 변경되면 react에서는 JSX만 바꾸면 되고, JS 코드까지 수정할 일이 없는데, jQuery나 DOM API는 DOM을 접근하는 JS 코드까지 수정한다. 데이터와 화면이 연결되었다기 보다는 직접 접근하여 조작.
리액트는 단방향 데이터 바인딩, 리덕스도 단방향 데이터 바인딩 흐름에서 만들어진것
관심사의 분리(separation of concern, SoC)에서부터 나온 패턴
- 관심사 분리로 코드의 단순화 및 유지보수의 더 높은 수준의 자유가 생긴다. 관심사가 잘 분리될 때 독립적인 개발과 업그레이드 외에도 모듈 재사용을 위한 더 높은 정도의 자유가 있다. 모듈이 인터페이스 뒤에서 이러한 관심사의 세세한 부분을 숨기기 때문에 자유도가 높아짐으로써 다른 부분의 세세한 사항을 모르더라도, 또 해당 부분들에 상응하는 변경을 취하지 않더라도 하나의 관심사의 코드 부분을 개선하거나 수정할 수 있게 된다.
SoC에서부터 나온 패턴이 MVC 패턴이다.
리액트는 MVC 패턴은 아니다.
ruby on rails, laravel, angular, backbonejs, django..
Flux는 Facebook에서 소개한 아키텍쳐입니다. 전통적인 MVC 패턴을 버리고, 개발이 오래되고 커져도 유지보수가 쉽고 reliable하고 high performance를 유지하는 새로운 패턴을 제시했습니다.
Redux는 Flux 패턴에 기반한 라이브러리이므로 Flux 패턴을 이해하고 넘어갈 필요가 있습니다!
Redux는 Flux 패턴을 근본으로한 라이브러리이다.
React 뿐 아니라 다른 UI 라이브러리에서도 사용할 수 있다.
언제 Redux를 써야할지 위의 기준으로 생각하자. 아무데서나 쓰지 말자.
Store
: Application의 전체 state는 store라고 불리는 곳에서 관리된다.Action
: action은 state 변화를 일으킬 수 있는 행동정보, 현상등이라고 생각하면 된다.Dispatcher
: action이 일어나면 Dispatcher를 통해서 store의 state가 업뎃된다.View
: state가 변경되면 view에서 감지하고, 화면에 반영(rerender) 된다.사용자의 입력이나 UI 조작, 웹 요청 완료같이 어떠한 상태 변화를 일으킬 수 있는 현상.
즉, 어떤 조작인지 정보를 갖고 있는 자바스크립트 객체이다
Action의 생김새
action은 객체이다.
action 객체는 아래와 같이 생겼다. 조작하고 싶은 정보는 type 프로퍼티에 지정한다.
{
type: 'SHOW_MODAL'
}
Action 특징
다음과 같은 특징이 있다. 이것만 기억하면 쉽다!
Action 정의
action은 객체 리터럴로 바로 정의하는 것이 아니라, action을 만들어주는 함수를 통해 만든다. 이러한 함수를 Action Creator(액션 생성자)라고 한다.
function showModal() {
return { type: 'SHOW_MODAL'}
}
action은 일반적으로 '행동 정보'인 type만 갖고 있지는 않고, 부가적인 정보를 포함하고 있다.
function showModal({ title }) {
return { type: 'SHOW_MODAL', title }
}
이렇게 action을 생성합니다.
showModal({ title: '로그인' });
reducer는 action이 발생했을 때 state를 변화시키기 위한 함수이다.
Reducer의 생김새
reducer는 action과 현재의 state를 인자로 받고, 이 action의 내용(type)에 따라 state를 변화시킨다.
(state, action) => nextState
Reducer 정의
function modal(state, action) {
switch(action.type) {
case 'SHOW_MODAL':
return {
...state,
showModal: true
};
case 'CLOSE_MODAL':
return {
...state,
showModal: false
};
default:
return state;
}
}
store는 앱에 오직 하나만 있고, 이 유일한 store를 사용하여 app의 전체 상태를 관리 한다.
store 생성은 Redux에서 하라는대로
//index.js
import { createStore } from 'redux'
import modalReducer from './ModalReducer';
const **store** = createStore(modalReducer);