{
type: 'TOGGLE_VALUE'
}
{
type: 'ADD_TODO',
data: {
id: 1,
text:'리덕스 배우기'
}
}
액션 객체를 만들어주는 함수
어떤 변화를 일으킬 때마다 액션 객체를 만들어야 하는데 매번 액션 객체를 직접 작성하기 위해 함수로 관리
function addTodo(data) {
return {
type: 'ADD_TODO',
data
}
}
// 화살표 함수
addTodo = data => ({
type: 'ADD_TODO'
data
})
const initialState = {
counter: 1
}
function reducer(state = initialState, action) {
switch(action.type){
case INCREASE:
return {
counter: state.counter + 1
}
default :
return state
}
}
subscribe 함수 안에 리스너 함수를 파라미터로 넣어 호출해 주면 리스너 함수가 액션이 디스패치되어 상태가 업데이트될 때마다 호출 된다.
스토어의 내장 함수 중 하나.
const listener = () => {
consol.log('상태 업데이트')
}
const unsubscribe = store.subscribe(listener);
unsubscribe();
액션에 이름 정의. 문자열 형태로 대문자로 작성, 고유해야 한다.
const TOGGLE_SWITCH = 'TOGGLE_SWITCH'
const INCREASE = 'INCREASE'
const DECREASE = 'DECREASE'
액션 생성 함수 작성. 반드시 type 값 지니고 있어야 한다.
const toggleSwitch = () => ({ type: TOGGLE_SWITCH})
const increase = (difference) => ({type: INCREASE})
const decrease = () => ({type : DECREASE})
const initialState = {
toggle : false,
counter : 0
}
function reducer(state = intialState, action) {
switch(action.type){
case TOGGLE_SWITCH:
return {
...state,
toggle : !state.toggle
}
case INCREASE:
return {
...state,
counter : state.counter + action.difference
}
case DECREASE:
reutnr {
...state,
counter: state.counter -1
}
default :
return state
}
}
createStroe 함수 사용. 파라미터엔 리듀서 함수 넣어 주어야 한다.
import {createStore} from 'redux';
...
const store = createStore(reducer);
상태가 업데이트 될 때, 즉 dispatch에 의해 action 함수 생성될 때마다 호출.
const render = () => {
const state = store.getState(); // 현재 상태 불러오기.
if(state.toggle){
divToggle.classList.add('active')
} else{
divToggle.classList.remove('active')
}
counter.innerText = state.counter;
}
render();
store.subscribe(render);
스토어의 내장함수 dispatch 사용. 파라미터는 액션 객체를 넣어 준다.
divToggle.onclick = () => {
store.dispatch(toggleSwitch());
};
btnIncrease.onclick = () =>{
store.dispatch(increase());
}
btnDecrease.onclick = () => {
stroe.dispatch(decrease());
}
순수한 함수
이것 외에 랜덤 값, Date 함수, 네트워크 요청 등은 파라미터가 같아도 다른 결과를 만들어 낼 수있다.