context API에 편의기능을 더 붙인것이 redux이다.
컴포넌트 사이의 state들을 컨트롤하기 위해 redux , 만약 하나의 컴포넌트안에서 state가 필요하다면 굳이 redux안써도됨
state들을 한곳에 모아놓고 관리한다. => state들을 안써도됨.(안 쓸 수 있다임, 안써야한다가아님)
redux는 단방향이다!
action을 만들어놓고 dispatch를 통해서 state들을 변경한다.
dispatch할때마다 기록이 남는다. (누가 누구를 바꾸고 등등) -> 에러 찾기가 쉽다! -> 에러가 적게난다(redux의 장점)
(타임머신 기능도 있음.)
reducer 새로운객체를 만들어냄, store에 들어있는 데이터가 대체됨 ( 새로운 state를 만들어 주는 애 불변성을 조심해야함!)
middleware : dispatch와 reducer 사이에 존재
불변성을 하는 이유 : 히스토리기능, 추적가능하게 하기위해
코드
const {createStore} = require('redux');
const reducer = (prevState, action) => { // 새로운 state들을 만들어주기
switch(action.type) {
case 'CHANGE_COMP_A':
return {
...prevState,
compA: action.data,
};
case 'CHANGE_COMP_B':
return {
...prevState,
compB: action.data,
};
case 'CHANGE_COMP_C':
return {
...prevState,
compC: action.data,
};
default: // 오타났을때 문제가 일어나므로 default를 써준다.
return prevState;
}
};
const initialState = {
compA: 'a',
compB: 12,
compC: null,
};
// const nextState = {
// ...initialState,
// compA: action.data,
// };
const store = createStore(reducer, initialState);
store.subscribe(() => { // react redux 안에 들어 있음.
console.log('change!'); // 화면 바꿔주는 코드를 넣는다.
})
console.log(store.getState());
const changeCompA = (data) => {
return {
type: 'CHANGE_COMP_A',
data,
}
};
//store.dipatch({
// type: 'CHANGE_COMP_A',
// dat: 'b',
// })
// 위에랑 아래랑 같은거
store.dispatch(changeCompA('b'));
console.log(store.getState());
반응형
'학습정리 > 자습' 카테고리의 다른 글
자바스크립트로 하는 자료구조와 알고리즘(11장) - 해시 테이블 (2) | 2019.11.13 |
---|---|
자바스크립트로 하는 자료구조와 알고리즘(10장) - 검색과 정렬 (0) | 2019.11.13 |
React로 Todo List 구현하기 ( version 1 , 하나의 컴포넌트에 구현!) (0) | 2019.10.31 |
자바스크립트로 하는 자료구조와 알고리즘(8장) - 재귀 (0) | 2019.10.24 |
자바스크립트로 하는 자료구조와 알고리즘(7장) - 메모리 관리 (0) | 2019.10.24 |