
2021년 8월 13일에 작성된 문서 1번 입니다.
React 배운 내용을 정리했습니다.
Redux: 자바스크립트 앱을 위한 예측 가능한 상태 컨테이너 Redux는 여러분이 일관적으로 동작하고, 서로 다른 환경(서버, 클라이언트)에서 작동하고, 테스트하기 쉬운 앱을 작성하도록 도와줍니다. 여기에 더해서 시간여행형 디버거와 결합된 실시간 코드 수정과 같은 훌륭한 개발자 경험을 제공합니다.
Redux의 정의
Redux와 함께 사용한다면 React의 단점을 보완해줄 수 있다.
console.log(store.getState());
/*
{
visibilityFilter: 'SHOW_ALL',
todos: [ //아래의 객체를 담은 배열.
{
text: 'Consider using Redux',
completed: true,
},
{
text: 'Keep all state in a single tree',
completed: false
}]
}
*/
따라서 기록을 남길 수도 시리얼라이즈(직렬화)할 수 있으며, 저장할 수 있고, 이후에 테스트나 디버깅을 위해서 재현하는 것도 가능.
//store: 상태관리하는 유일한 곳
//dispatch: 액션 객체들을 전달해준다 => 얘 통해서 액션 객체를 스토어로.
store.dispatch({
type: 'COMPLETE_TODO',
index: 1
})
store.dispatch({
type: 'SET_VISIBILITY_FILTER',
filter: 'SHOW_COMPLETED'
})
액션에 의해 상태 트리가 어떻게 변화하는 지를 지정하기 위해 순수 리듀서를 작성해야한다.
처음엔 하나의 리듀서로 충분 BUT 애플리케이션이 커지면서 상태 트리의 특정 부분을 조작하는 더 작은 리듀서들로 나누어 주는 것도 고려해야한다.
function visibilityFilter(state = 'SHOW_ALL', action) {
switch (action.type) {
case 'SET_VISIBILITY_FILTER':
return action.filter
default:
return state
}
}
function todos(state = [], action) {
switch (action.type) {
case 'ADD_TODO':
return [
...state,
{
text: action.text,
completed: false
}
]
case 'COMPLETE_TODO':
return [
...state.slice(0, action.index),
Object.assign({}, state[action.index], {
completed: true
}),
...state.slice(action.index + 1)
]
default:
return state
}
}
import { combineReducers, createStore } from 'redux'
let reducer = combineReducers({ visibilityFilter, todos })
let store = createStore(reducer)
Written with StackEdit.