💡 자바스크립트 상태관리 라이브러리
<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해주는 코드이다.