리액트를 공부하면서 상태관리라는 것을 알게되었다.
평소 백엔드 개발을 주로 하다보니 프론트에서 어떤 것을 사용하는지 잘 몰랐는데, 나만 모르고 있었던 것 같다...
기본적으로 많이 사용하고 있는 건 Redux 인 것 같은데, 최근 많은 라이브러리들이 나와있다. 그래서 이전의 사용하는 건 Redux 였지만 최근 프로젝트는 다른 라이브러리를 사용하는 것 같다. 하지만 나는 기본적인 것을 먼저 배우는 것을 선호하기 때문에 Redux 를 적용해보기로 했다.
위와 같은 내용들이 있고, 아래 코드는 간단하게 Redux 를 적용해서 로그인 상태를 저장하는 코드이다. 단순하게 로그인이 성공했으면 True, 아니면 False 가 되도록 해두었다.
우선 Slice 를 작성한다.
이름을 지정하고, 기본값을 false 로 지정, Reducer를 작성하면 된다.
login 을 호출하는 경우 isLogin 값이 true 가 되고, logout 을 호출하는 경우 false 가 되는 간단한 코드이다.
그리고 export 를 해줘야 다른 곳에서 사용이 가능하다.
export const loginSlice = createSlice({
name: 'auth',
initialState: { isLogin: false},
reducers: {
login: state => {
state.isLogin = true;
},
logout: state => {
state.isLogin = false;
},
},
})
export const { login, logout } = loginSlice.actions;
export default loginSlice.reducer;
그리고 store 를 생성해서, 위에서 작성한 Reducer 를 등록한다.
const store = configureStore({
reducer: { auth: loginSlice.reducer},
// middleware: [...middlewares]
})
export default store;
export type RootState = ReturnType<typeof store.getState>;
작성한 store 를 Provider 로 등록을 해줘야한다.
import store from "./Redux/Store/store";
root.render(
<React.StrictMode>
<Provider store={store}>
<App />
</Provider>
</React.StrictMode>
);
이제 상태관리를 실제로 사용하는 부분이다.
서버쪽으로 로그인 요청을 보낸 후에, 성공한 경우에 dispatch(login()) 을 호출하여 현재 로그인 상태로 변경한다.
const dispatch = useDispatch();
const loginAction = () => {
const form = new FormData();
form.append("id", id);
form.append("pw", password);
axios({
// 로그인 처리
})
.then((result)=>{
dispatch(login());
navigate("/");
})
.catch((error)=>{
console.log(error)
})
}
현재 로그인 상태인지 판단하여 다른 로직을 보여줘야 하는 경우 아래와 같이 사용한다.
const auth = useSelector((state: RootState) => state.auth.isLogin);
// auth 값을 사용해서 true, false 비교
이상으로 간단하게 Redux 를 사용하는 방법을 적용해 보았고, 다음엔 게시판을 업로드할 때 사용하는 것을 적용해 볼 예정이다.