redux를 통해 mock data를 관리하여 회원가입 및 로그인 기능을 구현하고자 한다.
import ReactDOM from 'react-dom/client';
import { RouterProvider } from 'react-router-dom';
import router from './Router';
import { Provider } from 'react-redux';
import { store } from './store/store';
const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement);
root.render(
  <React.StrictMode>
    <Provider store={store}>
      <RouterProvider router={router} />
    </Provider>
  </React.StrictMode>
);
// store.ts
import { configureStore } from '@reduxjs/toolkit';
import usersReducer from './usersSlice';
import authReducer from './authSlice';
export const store = configureStore({
  reducer: { users: usersReducer, auth: authReducer },
});
// usersSlice.ts
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
interface User {
  id: string;
  pw: string;
}
interface UsersState {
  users: User[];
}
const initialState: UsersState = {
  users: [
    {
      id: 'admin',
      pw: '1234',
    },
    { id: 'tester', pw: 'tester' },
  ],
};
const usersSlice = createSlice({
  name: 'users',
  initialState: initialState,
  reducers: {
    addUser: (state, action: PayloadAction<User>) => {
      state.users.push(action.payload);
    },
    removeUser: (state, action: PayloadAction<string>) => {
      state.users = state.users.filter((user) => {
        return user.id !== action.payload;
      });
    },
  },
});
export const { addUser, removeUser } = usersSlice.actions;
export default usersSlice.reducer;
&
// authSlice.ts
import { createSlice } from '@reduxjs/toolkit';
const initialState = {
  isLogin: false,
};
const authSlice = createSlice({
  name: 'auth',
  initialState: initialState,
  reducers: {
    login: (state) => {
      localStorage.setItem('isLogin', 'yes');
      state.isLogin = true;
    },
    logout: (state) => {
      localStorage.removeItem('isLogin');
      state.isLogin = false;
    },
  },
});
export const { login, logout } = authSlice.actions;
export default authSlice.reducer;