Framework/React
Redux 사용의 기본
ellapk
2022. 7. 4. 10:30
Redux 사용 이유는?
1. props 전송 없이 모든 컴포넌트가 데이터를 바로 꺼내쓸 수 있도록 하려고
2. reducer, dispatch 함수로 state 데이터 관리를 용이하게 하려고
Reducer
- a function describing how the application's state changes
(previousState, action) => nextState
reducer함수로 state데이터의 수정 방법을 미리 정의한다.
state 초기값과 데이터 수정방법을 넣는다. function reducer(state = 초기값, 액션)
let 초기값 = [
{id: 0, name: '멋진신발', quan : 2},
{id: 1, name: '멋진신발2', quan : 1}
];
function reducer(state = 초기값, 액션){
if(액션.type === '수량증가'){
let copy = [...state];
copy[0].quan++;
return copy
} else if(액션.type === '수량감소'){
let copy = [...state];
copy[0].quan--;
return copy
} else{
return state
}
}
reducer2, reducer3을 추가해서 여러개의 reducer를 구현해도 됨.
combineReducers()라는 함수안에 집어넣은 후에 createStore()안에 넣으면 된다.
Store
- 앱의 전체 상태 트리를 가지고 있는 스토어. 이 안의 상태를 바꾸는 유일한 방법은 액션을 보내는 것
- 클래스 X, just 몇가지 메서드가 들어있는 객체
Store메서드
- getState()
- dispatch(action)
- subscribe(listener)
Dispatch
- dispatch()를 사용하면 HTML 안에서 reducer함수를 동작시킬 수 있다.
- 액션을 보내서 상태 변경을 일으킨다.
<tbody>
{
props.state.map((a,i)=>{
return (
<tr key={i}>
<td>{ a.id }</td>
<td>{ a.name }</td>
<td>{ a.quan }</td>
<td>
<button onClick={()=>{ props.dispatch({ type: '수량증가'}) }}>+</button>
<button onClick={()=>{ props.dispatch({ type: '수량감소'}) }}>-</button>
</td>
</tr>
)
})
}
</tbody>