{
// 리덕스에서 상태를 업데이트할때 타입을보고 어떻게 업데이트할지 정함
type: "ADD_TODO",
// Type외에도 다른값을 넣을수 있음
data: {
id:0,
text:"리덕스 배우기"
}
}
// or
{
type: "CHANGE_INPUT",
text: "안녕하세요"
}
// or
{
type: "TOGGLE_VALUE"
}
export default function adTodo(data) {
return {
type: "ADD_TODO",
data
};
}
// 화살표 함수로도 만들수 있음
export const changeInput = text +> ({
type: "CHANGE_INPUT",
text
});
function counter(state, action){
switch (action.type){
case "INCREASE":
return state + 1;
case "DECREASE":
return state - 1;
default
return state;
}
}
액션을 발생 시키는것 or 액션을 스토어에 전달
액션 객체를 만들어 dispatch파라미터에 넣어서 호출해주고 호출을하면 해당 액션이 Store안에 있는 Reducer에 전달이되고 Reducer함수에서는 새로운 상태를 반환해주고 Store의 상태가 업데이트됨
dispatch({ type: "INCREASE" })
하나의 애플리케이션엔 하나의 스토어만 가질수 있음
여러개의 스토어를 가질수도 있지만 일반적인 방법은 아님 스토어가 여러개일때 개발자도구를 활용할수 없음
상태는 읽기전용
읽기 전용인 이유는 불변성을 지키기 위해서
변화를 일으키는 함수 리듀서는 순수한 함수여야 한다
리듀서 함수는 이전 상태와, 액션 객체를 파라미터로 받음 이전의 상태는 절대로 변경하지 않고 변화를 일으킨 새로운 상태 객체를 만들어서 반환함 똑같은 파리미터로 호출된 리듀서 함수는 언제나 똑같은 결과값을 반환해야만 함
Action 파일과 Reducer 파일을 하나의 파일로 몰아서 작성하는 디자인 패턴