2019-9-23 Redux 시작해보기
- 상태관리가 복잡해지면서 Redux를 보게되었다. 이미 프로젝트에 리덕스 코드들이 존재하지만, 이해하지 못한 부분이 있기때문에 따로 개념을 살펴본다.
- 리덕스에서 Store는 앱을 종료하면 저장되어 있던 모든 상태가 없어진다. 캐시기능 구현을 하는 장치가 필요하다.
액션(Action)
- 상태에 변화가 필요할때 액션으로 변경을 시킨다. 액션객체는 아래와 같은 형태로 이루어져 있다.
- 액션객체는 type필드를 필수적으로 가져야하며 그 외 값들은 개발자 마음대로 넣을 수 있다.
{
type: 'TOGGLE_VALUE'
}
// another ex
{
type: 'ADD_TODO',
data: {
id: 0,
text: '리덕스 배우기'
}
}
액션 생성함수
- 액션을 만드는 함수이며 파라미터를 받아와서 객체 형태로 만든다.
function addTodo(data) {
return {
type: 'ADD_TODO',
data
};
};
const changeInput = (text) => ({
type: 'Change_input',
text
})
리듀서
- 리듀서는 변화를 일으키는 함수다. 2가지 파라미터를 받는다. 현재 상태와 전달 받은 액션을 참조하여 새로운 상태를 만들어서 반환한다.
function reducer(state, action) {
// state update logic
return alteredState;
}
스토어
- 애플리케이션당 하나의 스토어를 만든다. 현재의 앱상태와 리듀서가 들어있다.
디스패치
- 스토어의 내장함수로 액션을 발생시킨다. dispatch는 액션을 파라미터로 전달한다. dispatch(action)… dispatch가 호출되면 스토어는 리듀서 함수를 실행시켜 해당 액션에 대한 로직을 실행한다.
구독
-
subscribe함수는 함수를 파라미터로 받는다. subsribe함수에 함수를 전달해주면 액션이 디스패치 되었을때마다 전달해준 함수가 호출된다.
-
리액트에서 리덕스를 적용할때는 react-redux를 사용하고 Provider라는 컴포넌트를 사용한다.
connect함수로 컴포넌트에 스토어 연동하기
- 컴포넌트에 리액트 스토어 안에 있는 값이나 액션함수들이 연동된 컴포넌트를 컨테이너 컴포넌트라고 한다.
class sampleComponent extends React.component {
// code...
// props 로 넣어줄 스토어 상태값
const mapStateToProps = state => ({
color: state.counter.color,
});
// props 로 넣어줄 액션 생성함수
const mapDispatchToProps = dispatch => ({
changeColor: color => dispatch(changeColor(color)),
});
// 컴포넌트에 리덕스 스토어를 연동해줄 때에는 connect 함수 사용
export default connect(
mapStateToProps,
mapDispatchToProps
)(sampleComponent);
}
- 컨테이너 컴포넌트를 만들때 react-redux에 있는 connect함수를 사용
- connect함수의 파라미터 mapStateToProps는 스토어 안에 있는 값을 props로 전달해주고 mapDispatchProps는 액션생성함수들을 props로 전달해준다.
- mapDispatchToProps는 상태변화가 일어나는것이 아닌 액션객체를 생성한다. 액션객체를 스토어에 전달해야 상태변화가 일어난다.
Written on September 23, 2019