💡 자바스크립트 상태관리 라이브러리

<A> 라는 컴포넌트에 state가 있는데 <D>라는 컴포넌트가 해당 state를 사용해야 한다면, 그 중간에 존재하는 <B>, <C> 컴포넌트는 굳이 해당 state가 필요하지 않아도 props를 만들어 자식 컴포넌트에 넘겨줘야 했다.
💡
Store(스토어)는 상태가 관리되는 오직 하나의 공간이다.
💡
Action(액션)은 스토어에 운반할 데이터를 말한다.
dispatch() 메소드를 사용한다.Action(액션) 객체가 dispatch() 메소드에 전달된다.
dispatch(액션)를 통해 Reducer를 호출한다.
Reducer는 새로운 Store 를 생성한다.

yarn add redux react-redux
or
npm i redux react-redux

import { createStore } from "redux";
import rootReducer from "./rootReducer";
const store = createStore(rootReducer);
export default store;
createStore는 첫 번째 인자로 reducer를 받는다.const initialState = {
isLogin: false,
};
const rootReducer = (state = initialState, action) => {
switch (action.type) {
case "LOGIN":
return { ...state, isLogin: action.payload };
case "LOGOUT":
return { ...state, isLogin: action.payload };
default:
return state;
}
};
export default rootReducer;
로그인 상태를 전역 변수로 다루고자 한다.
rootReducer에는 action과 state가 들어간다.
state에는 초기값을 지정해줄 수 있다. 여기서는 isLogin : false
action에서 “LOGIN”이라는 type 변수를 받아오면 기존 state와 isLogin의 바뀔 상태를 반환해준다.
export const setLogin = () => ({
type: "LOGIN",
payload: true,
})
export const setLogout = () => ({
type: "LOGOUT",
payload: false,
})
import { connect } from "react-redux";
import { setLogin } from "../redux/action";
isLogin 을 true값으로 변경시켜주려고 한다.export default connect(null, mapDispatchToProps)(LoginPage);
mapStateToProps 이고 두 번째 인자는 mapDispatchToProps 이다. 여기서는 state를 변경하고 있고 state를 직접 사용하는 부분이 없기 때문에 null을 할당했다.🔻 action을 실행시키는 방법 ⇒ dispatch
const mapDispatchToProps = (dispatch) => {
return {
setUserLogin: () => dispatch(setLogin()),
};
};
setUserLogin 을 hook처럼 쓸 수 있다.setLogin() 을 dispatch해주는 코드이다.