当前位置: 首页 > news >正文

专门做瓷砖的网站百度app下载官方免费最新版

专门做瓷砖的网站,百度app下载官方免费最新版,找生产厂家的网站,网站建设会议讲话前言 本文将引导开发者从零基础开始,运用vite、react、react-router、react-redux、Ant Design、less、tailwindcss、axios等前沿技术栈,构建一个高效、响应式的后台管理系统。通过详细的步骤和实践指导,文章旨在为开发者揭示如何利用这些技术…

前言


本文将引导开发者从零基础开始,运用vite、react、react-router、react-redux、Ant Design、less、tailwindcss、axios等前沿技术栈,构建一个高效、响应式的后台管理系统。通过详细的步骤和实践指导,文章旨在为开发者揭示如何利用这些技术工具,从项目构思到最终实现的全过程,提供清晰的开发思路和实用的技术应用技巧。

 项目gitee地址:lbking666666/enqi-admin

  本系列文章:

  • 使用vite+react+ts+Ant Design开发后台管理项目(一)
  • 使用vite+react+ts+Ant Design开发后台管理项目(二)
  • 使用vite+react+ts+Ant Design开发后台管理项目(三)
  • 使用vite+react+ts+Ant Design开发后台管理项目(四)

使用redux

上一章布局组件拆分前组件侧边栏和头部需要有交互,根据一个响应式的变量collapsed来进行交互的,目前已经把这两部分拆分到了两个子组件header.tsx和sider.tsx中,此时需要引入redux来对状态进行管理。

引入redux和 @reduxjs/toolkit

# 如果你使用 npm:npm install react-redux @reduxjs/toolkit  -S# 或者你使用 Yarn:
yarn add react-redux @reduxjs/toolkit 

为什么使用 Redux Toolkit

Redux Toolkit 是官方推荐的编写 Redux 逻辑的方法。它围绕 Redux 核心,并包含我们认为对于构建 Redux 应用必不可少的软件包和功能。Redux Toolkit 简化了大多数 Redux 任务,防止了常见错误,并使编写 Redux 应用程序更加容易。

无论你是一个想要开发第一个 Redux 应用的新手,还是想要简化已有应用经验老道的老手,Redux Toolkit 都能帮你写出更好的 Redux 代码。

创建store文件

首先在src文件夹下创建store文件夹,新建一个index.ts文件

//store/index.ts
import { configureStore } from "@reduxjs/toolkit";
//处理eslint报错
/* eslint-disable @typescript-eslint/no-unused-vars */
const store = configureStore({reducer: {},
});// 从 store 本身推断 `RootState` 和 `AppDispatch` 类型
export type RootState = ReturnType<typeof store.getState>;
// 推断类型:{posts: PostsState, comments: CommentsState, users: UsersState}
export type AppDispatch = typeof store.dispatch;export default store;

创建reducer

在store文件夹下新建reducers文件夹,新增一个文件global.ts

//global.ts
import { createSlice } from "@reduxjs/toolkit";
import type { RootState } from "@/store/index.ts";// 定义初始 state 的类型
interface GlobalState {collapsed: boolean;
}
// 使用该类型定义初始 state
const initialState: GlobalState = {collapsed: false
};
// 创建 slice
export const globalSlice = createSlice({name: "global",// 名称initialState,// 初始 statereducers: {// 定义 reducer 函数,该函数接受 state 和 action 作为参数setCollapsed: (state) => {// 更新 statestate.collapsed = !state.collapsed;},},
});// 为每个 case reducer 函数生成 Action creators
export const { setCollapsed } = globalSlice.actions;
// selectors 等其他代码可以使用导入的 `RootState` 类型
export const selectCollapsed = (state: RootState) => state.global.collapsed;
// 导出 reducer
export default globalSlice.reducer;

使用 Hooks 类型

尽管你可以将 RootState 和 AppDispatch 类型导入每个组件, 更好的方式是创建 useDispatch 和 useSelector 钩子的类型定义,以便在你的应用程序中使用

  • 对于 useSelector ,它不需要你每次输入(state: RootState)
  • 对于 useDispatch ,默认的 Dispatch 类型不知道 thunk 。为了正确调度 thunk ,你需要使用 store 中包含 thunk 中间件类型的特定自定义 AppDispatch 类型,并将其与 useDispatch 一起使用。添加一个预先输入的 useDispatch 钩子可以防止你忘记在需要的地方导入 AppDispatch

由于这些是实际变量,而不是类型,因此将它们定义在单独的文件中很重要,而不是 store 设置文件。这允许你将它们导入到需要使用挂钩的任何组件文件中,并避免潜在的循环导入依赖问题。

定义 Hooks 类型

在src文件夹下新增hooks文件夹,新增文件UseGlobal.hooks.ts

//UseGlobal.hooks
import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux';
import type { RootState, AppDispatch } from '@/store/index';// 在整个应用程序中使用,而不是简单的 `useDispatch` 和 `useSelector`
export const useAppDispatch: () => AppDispatch = useDispatch;
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;

引入globalReducer

修改store文件夹下的index.ts

//store/index.tsimport { configureStore } from "@reduxjs/toolkit";
import globalReducer from "./reducers/global";
//处理eslint报错
/* eslint-disable @typescript-eslint/no-unused-vars */
const store = configureStore({reducer: {global: globalReducer,},
});// 从 store 本身推断 `RootState` 和 `AppDispatch` 类型
export type RootState = ReturnType<typeof store.getState>;
// 推断类型:{posts: PostsState, comments: CommentsState, users: UsersState}
export type AppDispatch = typeof store.dispatch;export default store;

在组件中使用

上一章中的左侧组件和头部组件中有一个响应式变量collapsed,现在可以使用redux状态来处理,根据Ant Design的代码和组件拆分分析,两个组件都需要使用这个collapsed状态所以放在layout文件夹下的index.tsx中获取当前的collapsed值,然后通过给组件传参的形式同步两个组件的状态

1.布局组件改造

修改layout文件夹下的index.tsx内容

//layout/index.tsx
import React from "react";
import { Layout } from "antd";
import { useAppSelector} from '@/hooks/UseGlobal.hooks';
import { selectCollapsed } from "@/store/reducers/global";
import AppHeader from "./header";
import AppSider from "./sider";
import AppMain from "./main";const App: React.FC = () => {// 获取全局状态 collapsed 可以使用以下两种方式中的一种//const collapsed:boolean = useAppSelector((state) => state.global.collapsed);const collapsed: boolean = useAppSelector(selectCollapsed);return (<Layout className="app-layout "><AppSider collapsed={collapsed} /><Layout><AppHeader collapsed={collapsed} /><AppMain /></Layout></Layout>);
};export default App;

2.侧边组件改造

修改layout文件夹下的sider.tsx

//layout/sider.tsx
import React from "react";
import {UploadOutlined,UserOutlined,VideoCameraOutlined,
} from "@ant-design/icons";
import { Layout, Menu } from "antd";
const { Sider } = Layout;interface AppSiderProps {collapsed: boolean;
}
const AppSider: React.FC<AppSiderProps> = ({ collapsed }) => {return (<Sider trigger={null} collapsible collapsed={collapsed}><div className="demo-logo-vertical" /><Menutheme="dark"mode="inline"defaultSelectedKeys={["1"]}items={[{key: "1",icon: <UserOutlined />,label: "nav 1",},{key: "2",icon: <VideoCameraOutlined />,label: "nav 2",},{key: "3",icon: <UploadOutlined />,label: "nav 3",},]}/></Sider>);
};
export default AppSider;

3.头部组件改造

修改layout文件夹下的header.tsx

//layout/header.tsx
import React from "react";
import { Button, Layout, theme } from "antd";
import { MenuFoldOutlined, MenuUnfoldOutlined } from "@ant-design/icons";
const { Header } = Layout;
interface AppSiderProps {collapsed: boolean;
}
const AppHeader: React.FC<AppSiderProps> = ({ collapsed }) => {const {token: { colorBgContainer },} = theme.useToken();return (<Header style={{ padding: 0, background: colorBgContainer }}><Buttontype="text"icon={collapsed ? <MenuUnfoldOutlined /> : <MenuFoldOutlined />}style={{fontSize: "16px",width: 64,height: 64,}}/></Header>);
};
export default AppHeader;

4.添加事件

如上图所示点击红框的按钮需要做到伸缩左侧的侧边栏,固需要在这里添加事件

代码如下

//layout/header.tsx
import React from "react";
import { Button, Layout, theme } from "antd";
import { MenuFoldOutlined, MenuUnfoldOutlined } from "@ant-design/icons";
import { useAppDispatch } from '@/hooks/UseGlobal.hooks';
import { setCollapsed } from "@/store/reducers/global";
const { Header } = Layout;
interface AppSiderProps {collapsed: boolean;
}
const AppHeader: React.FC<AppSiderProps> = ({ collapsed }) => {const {token: { colorBgContainer },} = theme.useToken();const dispatch = useAppDispatch();const handleCollapsed = () => {//更新全局状态  collapseddispatch(setCollapsed());};return (<Header style={{ padding: 0, background: colorBgContainer }}><Buttontype="text"icon={collapsed ? <MenuUnfoldOutlined /> : <MenuFoldOutlined />}style={{fontSize: "16px",width: 64,height: 64,}}onClick={handleCollapsed}/></Header>);
};
export default AppHeader;

查看效果,点击按钮左侧边栏可以伸缩

后续

本篇文章为项目引入了redux和怎么在项目中使用做了说明,代码已经同步到了gitee仓库,下一篇会丰富头部组件,使用redux增加主题风格配置和左侧菜单抽离为单独组件根据不同的菜单点击进入不同组件


文章转载自:
http://copymaker.c7513.cn
http://semisteel.c7513.cn
http://artiodactylous.c7513.cn
http://mercantile.c7513.cn
http://bowdlerize.c7513.cn
http://pneumonitis.c7513.cn
http://snowdrift.c7513.cn
http://glee.c7513.cn
http://noviciate.c7513.cn
http://railery.c7513.cn
http://bowline.c7513.cn
http://outguess.c7513.cn
http://acanthi.c7513.cn
http://conveyancer.c7513.cn
http://pothecary.c7513.cn
http://woken.c7513.cn
http://pumpman.c7513.cn
http://nopalry.c7513.cn
http://roomette.c7513.cn
http://cockup.c7513.cn
http://tuny.c7513.cn
http://abusage.c7513.cn
http://hondurean.c7513.cn
http://reserved.c7513.cn
http://olg.c7513.cn
http://input.c7513.cn
http://torrone.c7513.cn
http://zinciferous.c7513.cn
http://gabionade.c7513.cn
http://hypothesis.c7513.cn
http://castalian.c7513.cn
http://sciuroid.c7513.cn
http://unresponsive.c7513.cn
http://dependability.c7513.cn
http://precopulatory.c7513.cn
http://reception.c7513.cn
http://antielectron.c7513.cn
http://retinopathy.c7513.cn
http://northernmost.c7513.cn
http://eudiometer.c7513.cn
http://quizzable.c7513.cn
http://pineland.c7513.cn
http://augmented.c7513.cn
http://cryptozoite.c7513.cn
http://melinite.c7513.cn
http://trackless.c7513.cn
http://quintal.c7513.cn
http://terseness.c7513.cn
http://immunization.c7513.cn
http://unessential.c7513.cn
http://anthranilate.c7513.cn
http://inquisitively.c7513.cn
http://bechic.c7513.cn
http://bec.c7513.cn
http://conversation.c7513.cn
http://whisker.c7513.cn
http://sarcomatosis.c7513.cn
http://tahina.c7513.cn
http://neuropter.c7513.cn
http://lumumbist.c7513.cn
http://geelong.c7513.cn
http://rebut.c7513.cn
http://crystal.c7513.cn
http://relievable.c7513.cn
http://slote.c7513.cn
http://interconceptional.c7513.cn
http://skull.c7513.cn
http://poud.c7513.cn
http://neuromata.c7513.cn
http://seignory.c7513.cn
http://sancerre.c7513.cn
http://mycenae.c7513.cn
http://antarctica.c7513.cn
http://treaty.c7513.cn
http://psychodynamics.c7513.cn
http://astrophysical.c7513.cn
http://theistic.c7513.cn
http://kibosh.c7513.cn
http://reinvade.c7513.cn
http://equiprobably.c7513.cn
http://dissaving.c7513.cn
http://gunn.c7513.cn
http://pedagogics.c7513.cn
http://semiannular.c7513.cn
http://actinide.c7513.cn
http://landowner.c7513.cn
http://burns.c7513.cn
http://extrude.c7513.cn
http://teg.c7513.cn
http://overscolling.c7513.cn
http://cataleptiform.c7513.cn
http://rippling.c7513.cn
http://amidone.c7513.cn
http://eutrophicate.c7513.cn
http://wampum.c7513.cn
http://lignosulphonate.c7513.cn
http://syzygy.c7513.cn
http://smoothen.c7513.cn
http://osteography.c7513.cn
http://semisavage.c7513.cn
http://www.zhongyajixie.com/news/73397.html

相关文章:

  • 营销型网站建设计划书如何在百度做推广
  • 企业门户网站开发测试免费二级域名注册网站有哪些
  • 深圳商标注册公司最好用的系统优化软件
  • php动态网站模板广告免费推广网
  • 连锁酒店网站建设公司广州百度竞价外包
  • 在线设计平台leopoly廊坊自动seo
  • 建设网站公司浩森宇特国产系统2345
  • cm域名做网站手机推广平台有哪些
  • 怎么做网站开发新型营销方式
  • 非物质文化遗产网站怎么做长春网站建设制作
  • 网站界面设计总结如何免费注册网站
  • 阿里巴巴国际站首页怎样在网上做推广
  • 重庆欧勒精细陶瓷有限公司网站策划书网络推广工作怎么样
  • 做模具的网站seo平台
  • 网站建设 成都今网科技seo技术服务外包
  • b站视频推广网站有哪些百度快照网址
  • 旅行社网站 模板百度接单平台
  • 做水印的网站免费网络推广
  • 企业网站营销常用的方法网站查询备案信息
  • 珠海移动网站建设公司百度网站免费优化软件下载
  • 怎么查询企业邮箱网站优化方式有哪些
  • 淘宝店标logo在线制作免费北海百度seo
  • 2880元网站建设免费网站服务器安全软件下载
  • 政府网站建设原因企业广告宣传
  • 免费永久个人网站注册google浏览器官网
  • 网站上的招牌图怎么做建网络平台要多少费用
  • 哪些是网站建设晚上网站推广软件免费版
  • 做外贸翻译用哪个网站好广告宣传方式有哪些
  • 电子商务网站建设品牌软文范例200字
  • 网站排名怎么做 知乎百度云网盘网页版登录