※ 강의를 듣고 제가 이해한 내용을 바탕으로 정리한 것이라서 오류가 있을 수 있습니다.
리덕스 사용할 준비하기
redux 라이브러리 설치
npm install redux
그 다음에는 exercise.js 라는 파일을 src 에 생성하고 이 파일에서 redux를 불러와서 redux에 내장된 API를 사용해본다.
Hello, world!
해당 파일에 console 에 'Hello, world!' 를 출력하도록 코드를 작성한다.
exercise.js
console.log('Hello, world!');
그 다음에는 index.js 에서 해당 파일을 다음과 같이 불러온다.
index.js
import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; import reportWebVitals from './reportWebVitals'; import './exercise'; ReactDOM.render( <React.StrictMode> <App /> </React.StrictMode>, document.getElementById('root') ); reportWebVitals();
그리고 나서 npm start 명령어를 실행하여 개발서버를 실행한뒤 브라우저에서 개발자 도구를 열어본다.
실행 결과

그 다음에는 exercise.js 를 다음과 같이 수정해서 작성한다.
exercise.js
import { createStore } from 'redux'; // createStore는 스토어를 만들어주는 함수이다. // 리액트 프로젝트에서는 단 하나의 스토어를 만든다. /* 리덕스에서 관리 할 상태 정의 */ const initialState = { counter: 0, text: '', list: [] }; /* 액션 타입 정의 */ // 액션 타입은 주로 대문자로 작성한다. const INCREASE = 'INCREASE'; const DECREASE = 'DECREASE'; const CHANGE_TEXT = 'CHANGE_TEXT'; const ADD_TO_LIST = 'ADD_TO_LIST'; /* 액션 생성함수 정의 */ // 액션 생성함수는 주로 camelCase 로 작성한다. function increase() { return { type: INCREASE // 액션 객체에는 type 값이 필수이다. }; } // 화살표 함수로 작성하는 것이 더욱 코드가 간단하기에 // 이렇게 쓰는 것을 추천 const decrease = () => ({ type: DECREASE }); const changeText = text => ({ type: CHANGE_TEXT, text // 액션안에는 type 외에 추가적인 필드를 마음대로 넣을 수 있다. }); const addToList = item => ({ type: ADD_TO_LIST, item }); /* 리듀서 만들기 */ // 위 액션 생성함수들을 통해 만들어진 객체들을 참조하여 // 새로운 상태를 만드는 함수를 만든다. // 주의: 리듀서에서는 불변성을 꼭 지켜줘야 한다. function reducer(state = initialState, action) { // state 의 초기값을 initialState 로 지정했다. switch (action.type) { case INCREASE: return { ...state, counter: state.counter + 1 }; case DECREASE: return { ...state, counter: state.counter - 1 }; case CHANGE_TEXT: return { ...state, text: action.text }; case ADD_TO_LIST: return { ...state, list: state.list.concat(action.item) }; default: return state; } } /* 스토어 만들기 */ const store = createStore(reducer); console.log(store.getState()); // 현재 store 안에 들어있는 상태를 조회한다. // 스토어안에 들어있는 상태가 바뀔 때 마다 호출되는 listener 함수 const listener = () => { const state = store.getState(); console.log(state); }; const unsubscribe = store.subscribe(listener); // 구독을 해제하고 싶을 때는 unsubscribe() 를 호출하면 된다. // 액션들을 디스패치 본다. store.dispatch(increase()); store.dispatch(decrease()); store.dispatch(changeText('안녕하세요')); store.dispatch(addToList({ id: 1, text: '와우' }));
리덕스 스토어 안의 상태는 액션이 디스패치됨에 따라 업데이트 된다. 위 코드에서는 listener라는 함수를 만들어서 리덕스 상태에 변화가 생겼을 때 마다 콘솔에 상태를 출력하도록 처리하였다.
코드의 최하단에서는 여러가지 액션들을 디스패치 했는데 액션이 디스패치 될 때마다 상태가 바뀌고 이에 따라 listener 함수가 호출 될 것이다. 브라우저를 열어서 개발자 도구를 열어본다.
실행 결과

결과가 잘 나타난 것이 확인됬다면 이제 본격적으로 리액트 프로젝트에 리덕스를 적용할 준비가 끝마쳐 진 것이다.
index.js 에서 방금 만든 exercise.js 를 불러오는 코드를 지우면 된다.
'개발 공부한 내용 정리 > React' 카테고리의 다른 글
React- 카운터 구현하기 (0) | 2020.10.30 |
---|---|
React- 리덕스 모듈 만들기 (0) | 2020.10.29 |
React- 리덕스의 3가지 규칙 (0) | 2020.10.27 |
React- 리덕스에서 사용되는 키워드 (0) | 2020.10.26 |
React- useReactRouter Hook 사용하기 (0) | 2020.10.25 |