일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 네이버페이사기
- 맛사지
- 막탄
- 중고나라
- 유효성검사
- Webpack
- webpack.config.js
- JavaScript
- 특수문자
- REACT
- 사기
- 정규식
- 세부
- 해외여행
- 마사지
- Hooks
- 구분
- ES6
- plugin
- 중고거래사기
- js
- autocomplate
- 중고나라사기
- 정직하게사세요
- 여행
- 삼성무선청소기제트
- 스쿠버다이빙
- 자동완성
- 스노쿨링
- Today
- Total
Ryu.log
[ React redux 03 ] 변화를 일으키는 함수, 리듀서 본문
01. 변화를 일으키는 함수, 리듀서
//기존 코드 이어서 //(...) const initialState = { number : 0 }
이제 리듀서 함수를 만들어 보자. initialState 아래쪽에 아래와 같이 함수를 정의해보자.
//(...) function counter(state = initialState, action) { switch(action.type) { case INCREMENT: return { number: state.number + action.diff } case DECREMENT: return { number: state.number - action.diff } default: return state; } }
예제 코드가 숫자를 빼고 더하는 기능이므로 리듀서 함수의 이름은 counter()로 지정하고,
함수에서 파라미터를 설정하는 부분에 state = initialState가 설정되어 있는데 이는 ES6 문법으로,
state 값이 undefined라면 initialState를 기본값으로 사용한다는 의미이다.
함수 내부에서는 action.type에 따라 현재 상태와 액션 객체를 참조하여 새 객체를 만들어 주었다.
지금은 number 값만 설정했는데, 지금처럼 상태에 값이 하나만 잇는 경우는 많지 않다.
number 말고도 다른값이 있으면 어떻게 해야 할까? 그방법은 아래 코드를 참고해보자.
//(...) const initialState = { number : 1, foo: 'bar', baz: 'qux' } function counter(state = initialState, action) { switch(action.type) { case INCREMENT: return Object.assign({}, state, { number: state.number + action.diff }) case DECREMENT: return Object.assign({}, state, { number: state.number - action.diff }) default: return state; } }
리덕스에서 상태를 업데이트할 때는 컴포넌트의 state를 다룰 대처럼 값을 직접 수정하면 안된다.
새로운 객체를 만든 후 그 안에 상태를 정의해야 한다.
Object.assign 함수를 실행하면 파라미터로 전달된 객체들을 순서대로 합쳐준다.
Object.assign을 사용하면 역순으로 객체를 왼쪽으로 덮어쓰면서 원하는 상태를 지닌 새객체를 만들어준다.
ES6문법의 전개연산자(...)를 사용하면 더욱 깔끔하게 코드를 입력 할 수 있다. 코드를 한번 아래와 같이 입력해보자.
function counter(state = initialState, action) { switch(action.type) { case INCREMENT: return { ...state, number: state.number + action.diff } case DECREMENT: return { ...state, number: state.number - action.diff } default: return state; } }
리듀서를 잘 만들었는지 확인해 보자. 아래쪽에 다음 코드를 입력하고 Run 버튼을 눌러보자.
//(...) console.log(counter(undefined, increment(1)));
number가 1에서 2로 잘 변경되었다. 테스트후에는 이 코드를 지워 주자.
리덕스를 사용하면 이렇게 리듀서 함수를 직접 실행하는 일은 없다. 이 함수를 실행하는 작업은 리덕스의 몫이다.
이 글은 Velopert님의 책을 실습하며 공부한 자료입니다.
'Prev-content' 카테고리의 다른 글
[ React redux 05 ] 리덕스의 세가지 규칙 및 정리 (0) | 2018.09.07 |
---|---|
[ React redux 04 ] 리덕스 스토어 생성, 구독, 액션전달(dispatch) (0) | 2018.09.07 |
[ React redux 02 ] 액션과 액션 생성함수 (0) | 2018.09.04 |
[ React redux 01 ] Redux의 소개 (0) | 2018.09.04 |
[ NodeJS 10 ] console 객체 (0) | 2018.08.06 |