액션

리덕스에는 액션이라는 개념이 존재합니다

상태에 변화가 필요할 때 액션을 발생시킵니다

{
  type: "click"
}

위와 같이 액션 객체는 type을 필수로 가지며 그외의 값은 마음대로 넣을 수 있습니다

{
  type: "click",
  name: "jikwan"
}

액션 생성 함수

말 그대로 액션을 만드는 함수를 뜻함

export function addTodo(data) {
  return {
    type: "ADD_TODO",
    data
  };
}

// 화살표 함수로도 만들 수 있습니다.
export const changeInput = text => ({ 
  type: "CHANGE_INPUT",
  text
});

리덕스에 액션 생성 함수를 필수적으로 사용해야하는 것은 아니며 직접 액션 객체를 생성해도 됩니다.


리듀서

변화를 일으키는 함수

state, action 두가지 파라미터를 받음

function reducer(state, action) {
  // 상태 업데이트 로직
  return alteredState;
}

useReducer와 똑같은 형태를 지니고 있음

//ex
function counter(state, action) {
  switch (action.type) {
    case 'INCREASE':
      return state + 1;
    case 'DECREASE':
      return state - 1;
    default:
      return state;
  }
}

useReducer에서는 default:thorw new Error()와 같이 에러를 발생시키는 반면 리덕스에서는 기존 state를 반환