리덕스는 자바스크립트를 위한 상태 관리 프레임워크이다.
🙋 React를 사용하면 Redux도 같이 사용하는데 그 이유는 뭘까?
결론을 먼저 말씀드리면 Redux로 상태를 관리하기 위해서이다.
React는 부모 컴포넌트인 App컴포넌트에서 모든 것(state와 동작)을 관리하고 데이터를 아래로 내려주는 구조로 부모컴포넌트의 데이터를 props로 자식컴포넌트에게 전달해준다.
앱이 커지고 깊은 곳에 있는 자식 컴포넌트에 상태값을 전달할 때 데이터 흐름 파악이 어려워 지고 복잡성으로 관리하기가 어려워지는 문제가 발생한다.
그러나 Redux를 사용하면 state를 중앙에서 상태를 관리하여 상태 관리 코드를 분리하여 사용할 수 있기 때문이다.
공식문서를 읽다보면 Redux는 상태를 관리하기에 좋은 도구이지만 여러분의 상황에 적당한지는 따져 보아야 한다고 안내해준다. 잠재적인 이점과 그에 따르는 단점을 이해하고 사용하도록 하자.
액션은 type 속성값을 가진 자바스크립트 객체다.
상태값은 오직 액션 객체에 의해서만 변경되어야 한다.
액션은 데이터 객체로 type과 payload 속성으로 구성되어 있다.
{
type: 'setId', // type은 문자열로 표현
payload: { id }, // payload는 객체로 표현
}
디스패처는 액션을 스토어로 전달하는 과정을 조율하고 스토어의 액션 핸들러가 올바른 순서로 실행되도록 관리한다.
스토어는 리덕스의 상태값을 가지는 객체다. 액션의 발생은 store의 dispatch 메서드로 시작된다. 스토어는 액션이 발생하면 미들웨어 함수를 실행하고, 리듀서를 실행해서 상태값을 새로운 값으로 변경한다.
리덕스에선 기존 상태를 다른 상태로 변경하는 함수를 리듀서라고 한다.리듀서는 이전 상태값과 액션 객체를 입력으로 받아서 새로운 상태값을 만드는 순수함수다.
function reducer(state = 0, action = { type: '' }) {
if (action.type === 'INCREMENT') {
return state + 1;
}
if (action.type === 'DECREMENT') {
return state - 1;
}
return state;
}
View에서는 보이는 것에만 집중 한다.
참고사이트: https://ko.redux.js.org/
참고문서: 실전 리액트 프로그래밍 [이재승 지음, 인사이트]