diff --git a/package.json b/package.json index 5a5539d..ddbcf01 100644 --- a/package.json +++ b/package.json @@ -9,12 +9,15 @@ "preview": "vite preview" }, "dependencies": { + "@reduxjs/toolkit": "^1.9.3", "antd": "^5.3.2", "localforage": "^1.10.0", "match-sorter": "^6.3.1", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-redux": "^8.0.5", "react-router-dom": "^6.9.0", + "redux": "^4.2.1", "sort-by": "^1.2.0", "web-vitals": "^3.3.0" }, diff --git a/src/main.tsx b/src/main.tsx index 87595b1..445e4e6 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,5 +1,7 @@ import React from "react"; import ReactDOM from "react-dom/client"; +import { Provider } from "react-redux"; +import store from "./store"; import reportWebVitals from "./reportWebVitals"; import { BrowserRouter } from "react-router-dom"; import { ConfigProvider } from "antd"; @@ -7,20 +9,18 @@ import zhCN from "antd/locale/zh_CN"; import App from "./App"; import "./index.scss"; //全局样式 -const root = ReactDOM.createRoot( - document.getElementById("root") as HTMLElement -); - ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( - - - - - + + + + + + + ); diff --git a/src/pages/login/index.tsx b/src/pages/login/index.tsx index 257d12e..b49bd5f 100644 --- a/src/pages/login/index.tsx +++ b/src/pages/login/index.tsx @@ -1,3 +1,36 @@ -export const LoginPage = ()=>{ - return <>我是登录界面 -} \ No newline at end of file +import { Button } from "antd"; +import { useDispatch, useSelector } from "react-redux"; +import { loginAction, logoutAction } from "../../store/user/loginUserSlice"; +export const LoginPage = () => { + const dispatch = useDispatch(); + const loginState = useSelector((state: any) => { + return state.loginUser.value; + }); + return ( + <> + + + {loginState.isLogin && ( + + )} + + ); +}; diff --git a/src/store/index.ts b/src/store/index.ts new file mode 100644 index 0000000..d8136b5 --- /dev/null +++ b/src/store/index.ts @@ -0,0 +1,10 @@ +import { configureStore } from "@reduxjs/toolkit"; +import loginUserReducer from "./user/loginUserSlice"; + +const store = configureStore({ + reducer: { + loginUser: loginUserReducer, + }, +}); + +export default store; diff --git a/src/store/user/loginUserSlice.ts b/src/store/user/loginUserSlice.ts new file mode 100644 index 0000000..f0e6c11 --- /dev/null +++ b/src/store/user/loginUserSlice.ts @@ -0,0 +1,33 @@ +import { createSlice } from "@reduxjs/toolkit"; + +type UserStoreInterface = { + user: any; + isLogin: boolean; +}; + +let defaultValue: UserStoreInterface = { + user: null, + isLogin: false, +}; + +const loginUserSlice = createSlice({ + name: "loginUser", + initialState: { + value: defaultValue, + }, + reducers: { + loginAction(stage, e) { + stage.value.user = e.payload.user; + stage.value.isLogin = true; + }, + logoutAction(stage) { + stage.value.user = null; + stage.value.isLogin = false; + }, + }, +}); + +export default loginUserSlice.reducer; +export const { loginAction, logoutAction } = loginUserSlice.actions; + +export type { UserStoreInterface };