store : 정보들이 저장되어 있는 공간
store에 접근하기 전 거치는 함수들
render : state 값을 참조해서 UI를 만들어주는 개발자가 짜는 코드
state → getState → render
store의 값이 바뀔 때마다 render 함수가 실행될 수 있다면?
→ subscribe!
action이 dispatch에게 전달됨
reducer를 호출해서 state 값을 변경
현재 state 값 전달, action 전달
action을 참조해서 새로운 state 값을 만들어 return하는 state를 가공하는 가공자
subscribe함수를 호출해서 render 함수가 실행되도록
redux를 사용해서 코드를 작성해보면
function reducer(state, action) {
if(state === undefined) {
return { color: 'yellow' }
}
}
const store = Redux.createStore(reducer);
function red() {
const state = store.getState();
document.querySelector('#red').innerHTML = `
<div class="container" id="component_red" style="background-color:${state.color}">
...
function reducer(state, action) {
if(action.type === 'CHANGE_COLOR') {
newState = Object.assign({}, state), { color: 'red' };
return newState;
}
}
Object.assign({}, {name:'egoing'}, {city: 'seoul'}); // 1. 빈객체, 2. 빈객체를 복제할 속성을 주면됨
subscribe에 render를 등록해놓으면 된다.
store.subscribe(red);
red();
redux가 없다면 컴포넌트 간의 의존성이 강하다.
따라서 컴포넌트가 변경되거나 추가되면 연결되어 있는 컴포넌트들 모두 변경되어야 하는 문제점이 있다.
redux를 사용하면, 컴포넌트들이 상호작용할 때의 의존성을 낮출 수 있다.
store를 만들어 구독(등록)/발행(데이터전달) 기능과 중앙집중적 관리 체계를 통해 element 간의 의존성을 갖지 못하게 한다.
이는, element 자체를 독립적으로 존재하게 하며, 모듈화의 기본 형태를 갖추게 된다.