안녕하세요. 이번 시간에는 간단하게 Redux-toolkit으로 간단한 회원가입하고 로그인을 구현해보겠습니다.
비동기 통신은 가짜 json api를 구성하여 만들어보겠습니다.
{
"user": [
{
"id": "abc",
"password": "abc1"
}
]
}
interface User {
id: string;
password: string;
}
그다음은 리덕스 환경 설정을 해줘야합니다. 저는 redux라는 폴더를 생성 후 그 안에 configStore.ts, configStore.hooks.ts, modules 폴더를 만들었습니다. 그리고 modules 폴더안에 user.ts를 만들어줬습니다.
-> configStore에는 modules 내 export 한 reducer들을 통합해주는 환경설정을 해주는 곳이고, configStore.hooks.ts에는 별도의 useDispatch와 useSelector를 설정하여 RootType을 안붙이고 하기 위한 설정을 해줍니다. user.ts는 user에 대한 reducer 함수 기능은 만들어주는 곳입니다.
user.ts로 가서 interface, initialState, createSlice를 만들어줍니다.
-> export하여 해당 interface를 SignUp,SignIn 에서 import 후 사용해줍니다.
액션, 리듀서를 한 번에 만들어주는 createSlice를 만들어주고 export 해줍니다.
configStore.ts 에서 export한 user reducer를 configureStore에 넣어주고 store를 export default 해줍니다. 또한 필요한 RootState 타입과 dispatch 타입을 만들어준후 export 해줍니다
configStore.hooks.ts 안에 configStore에서 만든 type을 받아서 useDispatch와 useSelector를 대신해 사용할 리액트 훅을 만들어줍니다.
user.ts 안에서 회원가입때 필요한 함수를 createAsyncThunk를 사용하여 만들어줍니다
addUseAsync를 SignUp.tsx에서 import 해 configStore.hooks.ts에서 만든 dispatch로 실행시켜 회원가입을 실행해줍니다. -> 회원가입 버튼 클릭시 handleSubmit 실행
로그인은 로그인한 유저 정보를 받아서 리덕스 상태값에 넣어야하므로 createAsyncThunk로 로그인한 유저 정보를 return 받음
extraReducers에서 setUserAsync과 완료될 시 action.payload를 받아와 redux user 상태값에 넣기
리덕스에 저장된 user 상태값을 export
저장된 리덕스 state 값을 받고 싶을때 configStore.hooks.ts에서 만든 dispatch와 18번 항목에서 export한 getUserInfo를 활용하여 받아올 수 있음
정규표현식이나 예외처리등 사용안하고 오로지 typescript를 이용한 redux-toolkit 사용에만 초점 맞춰서 개발을 진행하였습니다. 추가적으로 필요한 부분은 기능을 덧붙여서 사용하시면 될 듯합니다
감사합니다
잘 정리되어 있어서 너무 보기 편해요! 감사합니다 :)