🍳리덕스
- 리덕스(Redux)를 왜 쓸까? 그리고 리덕스를 편하게 사용하기 위한 발악 (i)
- 스토어 : 어플리케이션의 상태값들을 내장
- 디스패치 : 액션을 스토어에 전달
- 디스패치 : 액션을 스토어에 전달하는 것을 의미
- 리듀서 : 상태를 변화시키는 로직이 있는 함수
- 구독 : 스토어 값이 필요한 컴포넌트는 스토어를 구독
🎨리덕스 3가지 규칙
- 스토어는 단 한개 존재(리듀서는 여러 개 만들어서 관리)
- State는 읽기 전용 (직접 수정하면 안된다.)
- 변화는 순수 함수로 구성(여기서 함수는 리듀서함수이다)
🎨라이브러리 다운로드
- yarn add react-redux@7.0.3
![](https://velog.velcdn.com/images/ghdrn221/post/9f342c9a-c270-4426-aefd-ee1dc54b065d/image.png)
- yarn add redux@4.0.1
![](https://velog.velcdn.com/images/ghdrn221/post/b0d490b8-2835-430e-8eb1-a71c23d6fc3c/image.png)
🍳redux-counter
🎈구조
- actions : 어떤 기능을 구현할지를 설계(ex 인터페이스 처럼)
- components : 스토어에 저장된 데이터를 받아서 화면에 출력(컴포넌트)
- containers, lib : 스토어와 연관된 컴포넌트 저장(App,스토어 데이터 받아옴)
- reducers : 기능을 처리할 항목(함수들)
🎨src/containers/App.js 작성
![](https://velog.velcdn.com/images/ghdrn221/post/d0390a6c-ff8d-4518-8e78-e6cbd51036ed/image.png)
🎨src/index.js 소스 편집
![](https://velog.velcdn.com/images/ghdrn221/post/7ab7a97f-edcd-4dcb-a5ec-69a300b1c000/image.png)
🎨src/components/Counter 컴포넌트 생성(1)
- rscp 단축어(함수+prop types)
- prop-types - 전달받은 값을 타입체크
![](https://velog.velcdn.com/images/ghdrn221/post/eb34c5b9-0199-407d-8334-9e13d6095264/image.png)
- props의 전달받은 매개변수 자료형을 설정
![](https://velog.velcdn.com/images/ghdrn221/post/b8ca9ade-7242-4236-a828-b704dcb93c0f/image.png)
- props의 기본설정값
![](https://velog.velcdn.com/images/ghdrn221/post/d9bb1304-2a18-4c21-b76f-29fbf4c106b1/image.png)
🎨src/containers/App.js
![](https://velog.velcdn.com/images/ghdrn221/post/31d85c0f-cfe8-49a0-bd9f-57d8eef67746/image.png)
🎨중간확인
- 클릭, 우클릭, 더블클릭할 때 이벤트에 지정한 기본함수가 실행되고 있다.
![](https://velog.velcdn.com/images/ghdrn221/post/4d63e910-5638-471c-b302-a78025f97e28/image.png)
🎈액션생성
🎨src/actions/ActionTypes.js 작성(기능 설정)
- 리덕스 작업(액션생성(대문자로 작성)
- Action의 종류를 선언(=기능설계)
- 앞에 export를 붙이면 나중에 이것들을 불러올때
import * as types from './ActionTypes'
- 이벤트를 발생시켰을때 어떠한 기능(=함수)을 구현할것인지를 액션타입으로 설정한다.
![](https://velog.velcdn.com/images/ghdrn221/post/2402f9be-b0e5-48d0-ba0d-614dd552a9b9/image.png)
🎨src/actions/index.js
- 액션 생성 함수 작성
- action(타입)을 객체로 만들어서 처리해주는 액션타입함수 선언
=>전달 목적
- ()=>({})
![](https://velog.velcdn.com/images/ghdrn221/post/fe5cd41a-4704-465b-987c-6d6af60791bb/image.png)
🎈리듀서 생성(1)
🎨src/reducers/index.js
- 리듀서(스토어에 있는 값을 추가,수정,삭제,조회)
- ex)자바의 DTO(Setter,Getter 역할)
![](https://velog.velcdn.com/images/ghdrn221/post/0a72a3e9-7f65-40fe-86a6-048bb517adb4/image.png)
- 리듀서함수
- 1.state,action을 파라미터을 받는 함수
- 2.함수 내부에서 action.type에 따라 새로운 상태를 만들어서 반환(기존의 값을 변경시킨값)
- 3.state를 직접 수정하면 안되고 기존의 값을 변경된 값으로 덮어쓴 새로운 객체를 만들어서 반환(순수함수)
![](https://velog.velcdn.com/images/ghdrn221/post/f1e055b1-41c9-47c8-b176-43ab1ab1b1de/image.png)
🎈Store 생성
- src/index.js
- redux 라이브러리를 필수로 설치해야 한다.(위에 라이브러리 설치)
![](https://velog.velcdn.com/images/ghdrn221/post/b94cbb1b-b15c-4b97-abe0-c82b4303dd1f/image.png)
🎈CounterContainer 컴포넌트생성
- src/containers/CounterContainer.js
- 실질적으로 스토어에 저장,출력 처리해주는 함수를 작성=>컴포넌트와 연결
- Store(App.js)-->CounterContainer --> Counter.js
![](https://velog.velcdn.com/images/ghdrn221/post/e14cb55d-1a97-4645-87c1-346dfebbbdb6/image.png)
![](https://velog.velcdn.com/images/ghdrn221/post/cb57601b-6888-4863-ad1f-09e9264ff3c1/image.png)
- 1.store안의 state값을 props로 연결시켜주는 함수
![](https://velog.velcdn.com/images/ghdrn221/post/e4e15643-307f-40ed-a6d2-fbccb998bf6f/image.png)
- 2.액션생성함수를 사용해서 액션을 생성하고 해당 액션을 dispatch하는 함수를 만든 후, 이를 props로 전달하여 증가, 감소, 색변경을 한다.
- 액션타입:()=>dispatch(액션타입에 해당하는 함수명())
![](https://velog.velcdn.com/images/ghdrn221/post/f33f6916-ee62-4fbf-9d64-399c3b9c6d7d/image.png)
🎨src/containers/App.js 작성
![](https://velog.velcdn.com/images/ghdrn221/post/3bde5463-6b39-4511-836c-13a04f9cd54d/image.png)
🎨결과 확인