reactjs后台管理系统搭建

2024-05-02 18:04

本文主要是介绍reactjs后台管理系统搭建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 通过yarn 模板创建reactjs项目

yarn create vite reactjs-antdesign-admin --template react-ts

2 基础路由测试

定义一个router/index.tsx,里面定义路由组件

const Router: React.FC = () => {return (<HashRouter><Switch><Route path="/" component={Welcome} exact/><Route path="/user" ><Switch><Route path='/user' render={() => <Redirect to="/user/login" />} exact /><Route path='/user/login' component={Login} /></Switch></Route><Route path="/welcome"component={Welcome}/><Route path="/admin"><Route path='/admin' render={() => <Redirect to="/admin/sub-page" />} exact /><Route path='/admin/sub-page' component={Admin}/></Route><Route path="/list" component={TableList} /><Route path="*" component={NotPage} /></Switch></HashRouter>);
};

 在App.tsx中使用路由组件

function App() :ReactElement{return (<div className="App"><BrowserRouter><Provider store={store}><Suspense fallback={<div>wwww</div>}><ErrorBoundary><Router /></ErrorBoundary></Suspense></Provider></BrowserRouter></div>);
}
export default App;

3 管理系统搭建

3.1 路由结构体

export interface AppRouter {path: string //路由路径name?: string //菜单名称component?: //组件| React.ComponentType<RouteComponentProps<any>>| React.ComponentType<any>auth?: boolean //是否认证isHidden?: boolean //菜单是否隐藏icon?: any //菜单图标redirectUrl?: string //菜单是否重定向routes?: AppRouter[] //子路由
}

3.2 路由定义

router/index.tsx 

const routers: Array<AppRouter> = [{path: '/',name: '主界面',component: Welcome,auth: true,icon: <CrownFilled />,},{path: '/user',name: '用户管理',redirectUrl: '/user/login',isHidden: true,icon: <CrownFilled />,routes: [{path: '/user/login',component: Login,icon: <CrownFilled />,},],},{name: '欢迎界面',path: '/welcome',component: Welcome,icon: <CrownFilled />,auth: true,},{name: '管理员',path: '/admin',redirectUrl: '/admin/sub-page',icon: <CrownFilled />,routes: [{name: '管理子页',path: '/admin/sub-page',icon: <CrownFilled />,component: Admin,},],},{name: '列表页面',path: '/list',component: TableList,icon: <CrownFilled />,auth: true,},{path: '*',component: NotPage,auth: true,isHidden: true,},
]

3.3 App布局文件

function App(): ReactElement {return (<><BrowserRouter><Provider store={store}><Suspense fallback={<PageLoading></PageLoading>}><ErrorBoundary><FrontendRouter routerConfig={WithAppRouters(routers)} /></ErrorBoundary></Suspense></Provider></BrowserRouter></>)
}
export default App

FontendRouter是处理认证的信息,WithAppRouters是重新构建真正的路由信息列表

FontendRouter主要是导入路由包含在

<MainLayout><Routepath={pathname}component={targetRouterConfig.component}exact/></MainLayout>

3.4 MainLayout布局文件定义

这里直接去ProLayout - 高级布局 - ProComponents (ant.design) 选择需要的布局

const MainLayout: React.FC<{ children: ReactNode }> = (props) => {const [settings, setSetting] = useState<Partial<ProSettings> | undefined>({fixSiderbar: true,layout: 'mix',splitMenus: false,})const [pathname, setPathname] = useState('/')const [num, setNum] = useState(40)if (typeof document === 'undefined') {return <div />}return (<divid="test-pro-layout"style={{height: '100vh',overflow: 'auto',}}><ProConfigProvider hashed={false}><ConfigProvidergetTargetContainer={() => {return document.getElementById('test-pro-layout') || document.body}}><ProLayoutprefixCls="my-prefix"bgLayoutImgList={[{src: 'https://img.alicdn.com/imgextra/i2/O1CN01O4etvp1DvpFLKfuWq_!!6000000000279-2-tps-609-606.png',left: 85,bottom: 100,height: '303px',},{src: 'https://img.alicdn.com/imgextra/i2/O1CN01O4etvp1DvpFLKfuWq_!!6000000000279-2-tps-609-606.png',bottom: -68,right: -45,height: '303px',},{src: 'https://img.alicdn.com/imgextra/i3/O1CN018NxReL1shX85Yz6Cx_!!6000000005798-2-tps-884-496.png',bottom: 0,left: 0,width: '331px',},]}{...defaultProps}location={{pathname,}}token={{header: {colorBgMenuItemSelected: 'rgba(0,0,0,0.04)',},}}avatarProps={{src: 'https://gw.alipayobjects.com/zos/antfincdn/efFD%24IOql2/weixintupian_20170331104822.jpg',size: 'small',title: '七妮妮',render: (props, dom) => {return (<Dropdownmenu={{items: [{key: 'logout',icon: <LogoutOutlined />,label: '退出登录',},],}}>{dom}</Dropdown>)},}}actionsRender={(props) => {if (props.isMobile) return []if (typeof window === 'undefined') return []return [<InfoCircleFilled key="InfoCircleFilled" />,<QuestionCircleFilled key="QuestionCircleFilled" />,<GithubFilled key="GithubFilled" />,]}}menuFooterRender={(props) => {if (props?.collapsed) return undefinedreturn (<divstyle={{textAlign: 'center',paddingBlockStart: 12,}}><div>© 2021 Made with love</div><div>by Ant Design</div></div>)}}onMenuHeaderClick={(e) => console.log(e)}menuItemRender={(item, dom) => (<divonClick={() => {setPathname(item.path || '/welcome')}}>{dom}</div>)}{...settings}>{props.children}</ProLayout></ConfigProvider></ProConfigProvider></div>)
}
export default MainLayout

prelayout需要配置:_defaultProps.tsx

import { CrownFilled } from '@ant-design/icons'
import { AppRouter } from '../FrontendAuth'
import { routers } from '@/router'
//将默认的路由配置生成prelayout需要的
export function WithAppRouters(appRouters1: AppRouter[]): AppRouter[] {const appRouterFun = (appRouters2: AppRouter[]): AppRouter[] => {const newAppRouters: AppRouter[] = []for (const appRouter of appRouters2) {if (!appRouter.isHidden) {newAppRouters.push(appRouter)if (appRouter.routes && appRouter.routes.length > 0) {appRouter.routes = WithAppRouters(appRouter.routes)}}}return newAppRouters}return appRouterFun(appRouters1)
}
export default {route: {path: '/',routes: WithAppRouters(routers),},location: {pathname: '/',},
}

4 显示结果

源码:liu289747235/reactjs-antdesign-admin

这篇关于reactjs后台管理系统搭建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/954855

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

90%的人第一步就错了! 顺利登录wifi路由器后台的技巧

《90%的人第一步就错了!顺利登录wifi路由器后台的技巧》登录Wi-Fi路由器,其实就是进入它的后台管理页面,很多朋友不知道该怎么进入路由器后台设置,感兴趣的朋友可以花3分钟了解一下... 你是不是也遇到过这种情况:家里网速突然变慢、想改WiFi密码却不知道从哪进路由器、新装宽带后完全不知道怎么设置?别慌

k8s搭建nfs共享存储实践

《k8s搭建nfs共享存储实践》本文介绍NFS服务端搭建与客户端配置,涵盖安装工具、目录设置及服务启动,随后讲解K8S中NFS动态存储部署,包括创建命名空间、ServiceAccount、RBAC权限... 目录1. NFS搭建1.1 部署NFS服务端1.1.1 下载nfs-utils和rpcbind1.1

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于