props drilling
을 겪게 되는데, 앱의 구조가 복잡해질 수록, 컴포넌트의 깊이가 깊어질수록 props drilling
이 심각해진다.store
에서 전역 상태를 관리할 수 있어서 상태를 끌어올려주고, 내려주는 상황을 피할 수 있어 과도한 props drilling
을 피할 수 있다.Action
객체 생성Action
객체는 Dispatch
함수의 인자로 전달Dispatch
함수가 Action
객체를 Reducer
함수로 전달Reducer
함수는 Action
객체의 값을 확인Store
의 상태 변경Store
안 상태가 변경되면 React는 화면을 다시 렌더링type
은 필수로 지정// type 은 필수로 지정
{ type : "ADD" }
// 필요에 따라 새로운 키와 값을 만들 수 있다.
{ type : "ADD" , id: Date.now() }
Action
객체를 생성하는 함수를 만들어 사용하는 경우가 많다.// 액션 생성자 Action Creater
const add = () => {
return {
type: 'ADD',
id : Date.now(),
}
}
Reducer
함수로 Action
을 전달해주는 함수Dispatch
함수의 인자는 Action
객체Dispatch
함수는 Reducer
함수 호출import { useDispatch } from 'react-redux';
const dispatch = useDispatch();
// 액션 생성자 함수 전달
dispatch(add());
// 액션 객체 전달
dispatch({ type : "ADD" , id: Date.now() });
Dispatch
에게 전달받은 Action
객체의 type
값에 따라 상태를 변경시키는 함수Reducer
함수는 순수 함수이어야 한다.Reducer
함수를 만들 수 있다.state
가 저장되어 있는 공간createStore
메서드Store
를 생성할 수 있다.createStore
메서드의 인자로 Reducer
함수를 넣어 연결해야 한다.Reducer
함수가 변경해야 하는 상태를 가져오기 때문useSelector
state
연결state
에 접근할 수 있게 해준다.useDispatch
Action
객체를 Reducer
함수로 전달해주는 메서드Single source of truth, 단일 진실 공급원
동일한 데이터는 항상 같은 곳에서 가져와야 한다. ex) Store
State is read-only, 상태는 읽기전용이다.
Redux의 상태를 직접 변경하는 것이 아닌 Action
객체를 통해서만 상태를 변경해야 한다.
Changes are made with pure functions, 변화는 순수함수를 통해서
Reducer
함수를 순수함수로 작성해야 한다.