:전역 상태를 관리할 수 있는 저장소인 Store를 제공하여 데이터(props) 흐름을 단순하게 해주고, Props Drilling과 같은 문제를 해결해주는 상태 관리 라이브러리



Redux에서는 데이터가 단방향으로 흐름
Action => Dispatch => Reducer => Store

: 상태(state)를 저장하고 관리하는 오직 하나뿐인 저장소
import { Provider } from 'react-redux;
//생략
<Provider store={store}>
<App />
</Provider>
import { createStore } from 'redux';
const store = createStore(reducer);
: Dispatch에게서 전달받은 Action 객체의 type 값에 따라서 상태를 변경시키는 함수
const count = 1
//첫번째 인자: 기존 state , 두번째 인자: action객체
//첫번째 인자에 default value를 설정해주지 않으면 undefined가 할당되어 오류발생 가능
// ex. const count = 1
const counterReducer = (state = count, action) => {
// Action 객체의 type 값에 따라 분기하는 switch 조건문
// action 객체에서 정의한 type에 따라 새로운 state를 리턴
switch (action.type) {
//action === 'INCREASE'일 경우
case 'INCREASE':
return state + 1
// action === 'DECREASE'일 경우
case 'DECREASE':
return state - 1
// action === 'SET_NUMBER'일 경우
case 'SET_NUMBER':
return action.payload
// 해당 되는 경우가 없을 땐 기존 상태를 그대로 리턴
default:
return state;
}
}
import { combineReducers } from 'redux';
const rootReducer = combineReducers({
counterReducer,
anyReducer,
...
});
: 어떤 액션을 취할 것인지(어떻게 state를 변경할지) 정의해 놓은 객체
// payload가 필요 없는 경우
{ type: 'INCREASE' }
// payload가 필요한 경우
{ type: 'SET_NUMBER', payload: 5 }
: 보통 Action을 직접 작성하기보다 Action 객체를 생성하는 함수를 만들어 사용하는 경우가 많음
// payload가 필요 없는 경우
const increase = () => {
return {
type: 'INCREASE'
}
}
// payload가 필요한 경우
const setNumber = (num) => {
return {
type: 'SET_NUMBER',
payload: num
}
}
: Reducer로 Action을 전달해주는 함수. Dispatch의 전달인자로 Action 객체가 전달
// Action 객체를 직접 작성하는 경우
dispatch( { type: 'INCREASE' } );
dispatch( { type: 'SET_NUMBER', payload: 5 } );
// 액션 생성자(Action Creator)를 사용하는 경우
dispatch( increase() );
dispatch( setNumber(5) );
: React-Redux에서 Redux를 사용할 때 활용할 수 있는 Hooks 메서드를 제공
useSelector()
useDispatch()
: Action 객체를 Reducer로 전달해 주는 Dispatch 함수를 반환하는 메서드.
import { useDispatch } from 'react-redux'
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)// state : Store에 저장된 모든 state
console.log(counter) // 1
1. Single source of truth
동일한 데이터는 항상 같은 곳에서 가지고 와야 한다는 의미. 즉, Redux에는 데이터를 저장하는 Store라는 단 하나뿐인 공간이 있음과 연결이 되는 원칙임
2. State is read-only
상태는 읽기 전용이라는 뜻으로, React에서 상태갱신함수로만 상태를 변경할 수 있었던 것처럼, Redux의 상태도 직접 변경할 수 없음을 의미. 즉, Action 객체가 있어야만 상태를 변경할 수 있음과 연결되는 원칙.
3. Changes are made with pure functions
변경은 순수함수로만 가능하다는 뜻으로, 상태가 엉뚱한 값으로 변경되는 일이 없도록 순수함수로 작성되어야하는 Reducer와 연결되는 원칙.
참고하면 좋은 문서: Redux 공식문서 / React-Redux 공식문서