아래 글보다 복잡하고 어려운 Redux 적응기에 들어가서 정독하시는 것이 더 좋습니다.
💡 전역 상태에서 관리하는 저장소
store
제공
전역으로 Store을 생성한다
import { Provider } from 'react-redux';
import { legacy_createStore as createStore } from 'redux';
const store = createStore(rootReducer) // reducer 모음집
root.render(
<Provider store={store}>
<App />
</Provider>
)
Reducer로 어떤 Action을 받으면 무엇을 진행할 지 적는다
// state들 어가는 곳에 전역 상태를 집어 넣음
const gloablState = {.......생략}
const rootReducer = (state = globalState, action) => {
// Action 객체의 type 값에 따라 분기하는 switch 조건문입니다.
switch (action.type) {
//action === 'SOME'일 경우
case 'SOME':
return state + 'SOME~'
// 해당 되는 경우가 없을 땐 기존 상태를 그대로 리턴
default:
return state;
}
// Reducer가 리턴하는 값이 새로운 상태가 됩니다.
};
Action은 dispatch가 어떤 움직임을 감지할 지 정해주는
const some = () => {
return {
type: 'SOME',
payload: 1 // 객체든 배여일든 원시값이든 넣어서 전달하는 곳
};
};
useDipatch로 어떤 함수가 호출되었을 때 dispatch 안에 action인자를 넣어서 reducer로 넣어줌
import { useDispatch } from 'react-redux';
const dispatch = useDispatch();
const something = () => {
dispatch(some());
};
useSelector는 컴포넌트가 Redux의 state에 접근할 수 있게 해줌
import { useSelector } from 'react-redux'
const state = useSelector(state => state.gloablState // 전역 상태를 불러오고
// 아래에서 필요에 따라 useState든 아님 다른 구조 분해 할당을 하는 방식으로 진행
(기록용)과제하면서 그렸던 도식
기존에는 하나의 컨트톨러 아래에 여러 model이 있고 각 model아래에 view가 하나씩 있었지만 model과 view의 데이터가 양방향으로 주고 받음. 그러다보니 아래와 같은 현상이 일어남
그.래.서.
Flux라는 형태를 만들어서 단방향 흐름이면서 action을 받으면 dispatcher가 store에 저장하고 view로 넘어가고 다시 action을 받아오는 형태로 만듦