import { createStore } from 'redux';
import reducer from '메인리듀서';
const configureStore = () => {
const store = createStore(reducer);
store.dispatch({
type: 'CHANGE_NAME',
data: 'zeromountain'
}); // type과 data가 리듀서로 전달되어 다음 state가 생성
return store
}
store
는 state
와 reducer
로 구성const initialState = {
name: 'yeongsan',
age: 31,
hobby: 'soccer'
}
상태
디스패치
로 전달된 액션
객체를 스토어 내의 state
에 반영
불변성을 지켜줘서 히스토리 관리
{
...state, // 유지해도 되는 데이터는 참조 관계로 둔다.
name: action.data // 값을 변경해야 할 데이터
}
const nest = {b: 'c'};
const prev = {a: nest};
const next = {...prev}
prev.a === next.a // true
prev === next // false
(이전상태, 액션) => 다음상태
const rootReducer = (state = initialState, action) => {
switch(action.type) {
case 'CHANGE_NAME':
return {
...state,
name: action.data,
}
default: {
return state;
}
}
}
const changeName = (data) => {
return {
type: 'CHANGE_NAME',
data,
}
}
action
을 store
로 전달하는 역할store.dispatch(changeName('zeromountain'));
state
사용하기props
로 userName을 넘겨주지 않아도 상태가 바뀌면 자동으로 리렌더링import {useSelector} from 'react-redux'
const 리액트_컴포넌트 = () => {
const userName = useSelector((state) => state.name)
(...)
}