Action 객체
가 생성됨Dispatch 함수
는 이 Action 객체를 인자로 Reducer 함수
에 전달해 줌전역상태 저장소 Store
의 state를 변경함전반적인 흐름
- 상태 변경 이벤트 -> Action -> Dispatch -> Reducer -> Store -> 렌더링
개념 : state(상태)를 저장하고 관리하는 하나뿐인 저장 공간
생성 : createStore 메서드를 활용 ⇒ Reducer를 연결해서 Store를 생성
import { createStore } from 'redux'
const store = createStore(rootReducer)
Dispatch에서 전달받은 Action 객체의 type값에 따라서 상태(state)를 변경시키는 함수
여러개의 Reducer 를 사용하는 경우
⇒ Redux의 combineReducers메서드를 사용해서 하나의 Reducer로 합쳐줌
reducer 는 action 타입을 참조하여 구체적으로 어떻게 state를 변경할지를 작성해놓음(구체적이고 실질적인 setState 행위 메뉴판 같은?)
어떤 액션을 취할 것인지 정의해 놓은 객체(액션 메뉴판 같은?)
보통 Action 객체를 생성하는 함수(액션 생성자, Action Creator)를 만들어 사용하는 경우가 많음
payload 가 필요한지에 따라 Action 객체의 형식이 구분됨
필요에 따라 payload 를 작성해 구체적인 값을 전달할 수도 있음
작성 형식은 보통 대문자와 Snake Case로 작성
Reducer로 Action을 전달해주는 함수
dispatch 함수의 전달인자로 Action 객체가 전달됨
Action 객체를 Reducer로 전달해 주는 dispatch 함수를 반환하는 메서드
// App.js 파일 (즉 dispatch 함수를 적용할 파일에서 해야 함)
import { useDispatch } from 'react-redux' // useDispatch 메서드를 쓰기 위해 불러옴
const dispatch = useDispatch() //
dispatch( increase() )
console.log(counter) // 2
dispatch( setNumber(5) )
console.log(counter) // 5
컴포넌트와 state를 연결하여 Redux의 state에 접근할 수 있게 해주는 메서드
// Redux Hooks 메서드는 'redux'가 아니라 'react-redux'에서 불러옴을 주의
import { useSelector } from 'react-redux'
const counter = useSelector(state => state)
console.log(counter) // 1
동일한 데이터는 항상 같은 곳에서 가지고 와야 한다.
Redux에는 데이터를 저장하는 공간은 Store 단 하나뿐임
상태는 읽기 전용
React에서 상태갱신함수로만 상태를 변경할 수 있었던 것처럼,
Redux의 상태도 직접 변경할 수 없고 Action 객체가 있어야만 상태를 변경할 수 있음
변경은 순수함수로만 가능
순수함수로 작성되어야하는 Reducer 와 연결되는 원칙
과제나 실제 애플리케이션에서는 components, pages 뿐만 아니라 actions, store, reducers 로 폴더와 파일을 구조화해서 작업하므로 케이스들을 보면서 어느 파일에서 어떤 부분을 작성해서 연결하고 이벤트가 발생하는 위치에서 dispatch 함수를 써서 전달하는지 정리가 필요한 것 같다.