Redux는 리액트에서 가장 사용율이 높은 상태관리 라이브러리이다. Redux를 사용하면 컴포넌트들의 상태 관련 로직들을 다른 파일들로 분리시켜서 더욱 효율적으로 관리 할 수 있고 글로벌 상태 관리도 쉽게 할 수 있다.
- 진실은 하나의 근원으로부터
- 애플리케이션의 모든 상태는 하나의 저장소 안에 하나의 객체 트리 구조로 저장된다.
- 상태는 읽기 전용이다.
- 상태를 변화시키는 유일한 방법은 무슨 일이 벌어지는 지를 묘사하는 액션 객체를 전달하는 방법뿐이다.
- 변화는 순수 함수로 작성되어야한다#
- 액션에 의해 상태 트리가 어떻게 변화하는 지를 지정하기 위해 프로그래머는 순수 리듀서를 작성해야한다.
- 상태를 예측 가능하게 만들어 준다.
- 유지보수
- 디버깅에 유리하다.
- 테스트를 붙이기 쉽다.
{
type: "TOGGLE_VALUE"
}
액션 객체는 type 필드를 필수적으로 가지고 있어야하고 그 외의 값들은 마음대로 넣어줄 수 있다.
{
type: "ADD_TODO"
data: {
id: 1,
text: "study redux"
}
}
type과 payload의 의미
{
type: "액션의 종류를 한번에 식별할 수 있는 문자열 혹은 심볼",
payload: "액션의 실행에 필요한 임의의 데이터",
}
export function addTodo(data) {
return {
type: "ADD_TODO",
data
};
}
// 화살표 함수로도 가능합니다.
export const inputChange = text -> ({
type: "INPUT_CHANGE",
text
});
function reducer(state, action) {
// 상태 업데이트 로직
return alteredState;
}
function counter(state, action) {
switch (action.type) {
case 'INCREASE':
return state + 1;
case 'DECREASE':
return state - 1;
default:
return state;
}
}