一、简介

一个使用React全家桶(react-router-dom,redux,redux-actions,redux-saga,reselect)+Material-ui构建的后来管理中心。

二、 附录
+ 1. [在线体验](https://simpleroom.github.io):账号:<code>admin</code>密码:<code>123456</code>
+ 2. [源码地址:https://github.com/SimpleRoom/walker-admin](https://github.com/SimpleRoom/walker-admin),觉得有用请戳:star~ 会不断更新......
+ 3. 默认使用: [create-react-app](https://github.com/facebook/create-react-app)
+ 4. 目前分5个页面:图表数据,个人资料,员工管理,会员管理,线路设计,酒店预订

三、 工具概括

+ 1、[redux](https://redux.js.org/):管理组件state的容器
+ 2、[react-redux](https://react-redux.js.org/):React官方控制React组件与Redux的连接容器
+ 3、[redux-actions](https://redux-actions.js.org/):简化Redux写法的工具
+ 4、[redux-saga](https://redux-saga.js.org/):Redux处理异步数据的中间件
+ 5、[reselect](https://github.com/reduxjs/reselect):Redux的选择器工具,精确获取指定state,减少不必要的渲染
+ 6、[plop](https://plopjs.com/):快速开发工具,自动生成指定模板文件的工具

四、功能概况

+ 1、路由权限匹配,可在登录时接口返回该账号权限级别,把routerList注入store
+ 2、异步获取github开放的个人信息接口,redux和redux-saga和redux-actions以及reselect是如何串联一起的。对应目录(src/store/modules/common)

// 1.redux-actions
import { createActions } from 'redux-actions'
export const {
// 获取github个人信息
fetchGitInfo,
setGithubInfo,
} = createActions(
{
// 获取github个人信息
FETCH_GIT_INFO: (username) => ({ username }),
SET_GITHUB_INFO: (githubData) => ({ githubData}),
},
)
export default {} //2.redux-saga
import axios from 'axios'
import { fork, put, takeEvery } from 'redux-saga/effects'
import {
// github 个人信息
fetchGitInfo,
setGithubInfo,
} from './action'
// 请求github
function* getGithubInfo(action) {
const { username } = action.payload
// username为你的github 用户名
const result = yield axios.get(`https://api.github.com/users/${username}`)
// console.log(action, result, 'saga.....')
yield put(setGithubInfo(result.data))
}
//
function* watchCommon() {
// 请求接口
yield takeEvery(fetchGitInfo, getGithubInfo)
}
export default [fork(watchCommon)] //3.reducer
import { handleActions } from 'redux-actions'
import {
// 暂存github信息
setGithubInfo,
} from './action'
// 该store的命名空间,可创建多个把store分开管理
export const namespace = 'common'
export const defaultState = {
// github个人信息
githubInfo: {},
}
export const commonReducer = handleActions(
{
[setGithubInfo]: (state, action) => {
const { githubData } = action.payload
return { ...state, githubData }
}
},
defaultState
) // 4.reselect
// 从store单独获取githubInfo,实际中可能有N多个接口的不同数据
export const getGithubData = state => state[namespace].githubData || {} // 5、组件内部使用
import React, { useEffect } from 'react'
import { connect } from 'react-redux'
import { fetchGitInfo } from '../../store/modules/common/action'
import { getGithubData } from '../../store/modules/common/selector' const mapStateToProps = state => ({
myGithubInfo: getGithubData(state),
})
const mapDispatchToProps = {
fetchGitInfo,
} const MyInfo = (props) => {
const { myGithubInfo, fetchGitInfo } = props
// react-hooks新增:可代替componentDidMount和componentDidUpdate
useEffect(() => {
if (myGithubInfo && !Object.keys(myGithubInfo).length) {
// 触发action,开始请求接口
fetchGitInfo('wjf444128852')
}
}, [myGithubInfo, fetchGitInfo])
return (
<div>
<p>{myGithubInfo.name}</p>
<p>{myGithubInfo.flowers}</p>
</div>
)
} export default connect(mapStateToProps, mapDispatchToProps)(MyInfo)

  

+ 3、员工管理和会员管理页面中选择了[Material-table](https://material-table.com/),内置搜索功能,可编辑,增加,删除。需要配置中文显示,配置参考(componenst/MaterialTable)

5、 目录结构

```shell

plop── 快速创建components和store的模板

┌── assets 资源文件

├── components 页面组件
          ├── router 路由配置
          ├── store state模块管理中心
src──├── styles 页面样式
          ├
          ├── utils 插件和工具
          ├
          ├── views 与路由对应的页面
          └── index.js 页面配置入口

┌── Card 面板组件
                        ├── CustomButtons 按钮组件
                        ├── CustomInput 输入框组件
                        ├── CustomTabs 公用Tab切换组件
components ──├── Dialog 弹框组件
                        ├── Footer 底部footer
                        ├── Grid 栅格组件
                        ├── HeadNavBar 头部导航组件
                        ├── HotelCard 酒店页面UI面板
                        ├── HotelList 酒店页面列表UI组件
                        ├── Login 登录组件
                        ├── MaterialTable 定制可编辑Table组件
                        ├── MuiDatepicker 日期选择器组件
                        ├── MuiTimepicker 时间选择器组件
                        ├── Notifications 自定义提示消息组件
                        ├── Snackbar Material-ui官方消息提示组件
                        ├── Table 定制不可编辑的Table组件
                        ├── Loading loading组件
                        ├── NotFound 404组件
                        ├── ScrollToTopMount 路由切换缓动到顶部组件
                        ├── SideBar 侧边栏路由导航
                        └── SideTool 右边工具栏组件

┌── modules 不同的state模块
             ├ ├── account 登录验证state
             ├ ├── common 全局公用的state
             ├ └── theme 主题控制state
store──├
             └── indexStore.js state入口

```

六、 结语

+ 1、上述中redux的工具使用相对复杂繁琐,且不适合react初学者!!!!
+ 1、以上只是实际开发中遇到的笔记总结,若有误请指出。
+ 2、如果打包部署到服务器二级目录如:www.xxx.com/admin,需要对路由添加配置
+ 3、React质量交流QQ群: <code>530415177</code>
+ 5、[前端联盟小组: https://github.com/jsfront](https://github.com/jsfront)

React全家桶+Material-ui构建的后台管理系统的更多相关文章

  1. 使用react全家桶制作博客后台管理系统

    前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基于react全家桶(React.React-r ...

  2. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

  3. 使用React全家桶搭建一个后台管理系统

    引子 学生时代为了掌握某个知识点会不断地做习题,做总结,步入岗位之后何尝不是一样呢?做业务就如同做习题,如果‘课后’适当地进行总结,必然更快地提升自己的水平. 由于公司采用的react+node的技术 ...

  4. webpack4 中的最新 React全家桶实战使用配置指南!

    最新React全家桶实战使用配置指南 这篇文档 是吕小明老师结合以往的项目经验 加上自己本身对react webpack redux理解写下的总结文档,总共耗时一周总结下来的,希望能对读者能够有收获, ...

  5. 基于react全家桶+antd-design+webpack2+node+express+mongodb开发的前后台博客系统

    很久没更新博客,最近也有点忙,然后业余时间搞了一个比较完整基于react全家桶+antd-design+webpack2+node+express+mongodb开发的前后台博客系统的流程系统,希望对 ...

  6. react-music React全家桶项目,精品之作!

    React-Music 全家桶项目,精品之作! 一.简介 该项目是基于React全家桶开发的一个音乐播放器,技术栈采用:Webpack + React + React-redux + React-ro ...

  7. 初学者的React全家桶完整实例

    概述 该项目还有些功能在开发过程中,如果您有什么需求,欢迎您与我联系.我希望能够通过这个项目对React初学者,或者Babel/webpack初学者都有一定的帮助.我在此再强调一下,在我写的这些文章末 ...

  8. react全家桶从0搭建一个完整的react项目(react-router4、redux、redux-saga)

    react全家桶从0到1(最新) 本文从零开始,逐步讲解如何用react全家桶搭建一个完整的react项目.文中针对react.webpack.babel.react-route.redux.redu ...

  9. vue全家桶和react全家桶

    vue全家桶:vue  +  vuex (状态管理)  + vue-router (路由) + vue-resource +axios +elementui react全家桶 : react + re ...

随机推荐

  1. Windows UI自动化测试的XPATH实现 - WPATH

    https://segmentfault.com/a/1190000010339021 从事Windows 桌面应用自动化测试也有一些年了,现在谈这个话题并不流行.因为除了企业级应用,很少有公司会只选 ...

  2. OpenGL是什么?GPU是什么?

    一.GPU与CPU CPU是处理基本算数运算的单元:它处理的数据是数:整型.浮点型.bool等等: GPU是处理图形运算的单元:它处理的数据是图形的数据矩阵:   GPU的输入是一个和多个图形,输出是 ...

  3. Codeforces Round #552 (Div. 3)-1154E-Two Teams-(模拟+双指针)

    http://codeforces.com/contest/1154/problem/E 解题: 举例n=10,k=1 1,2,10,4,7,6,9,8,5,3 第一次,1队先挑2,10,4这三个人 ...

  4. JavaScript基础10——正则

    什么是正则?     正则表达式(regular expression)是一个描述字符规则的对象.可以用来检查一个字符串是否含有某个字符,将匹配的字符做替换或者从某个字符串中取出某个条件的子串等.   ...

  5. yugabyte 做为hasura graphql-engine的pg数据引擎

    今天看了下yugabyte 的更新 ,ysql 基本可以生产可用,刚好测试了下与hasura graphql-engine的集成,发现很不错,可以直接运行 环境准备 docker-compose ve ...

  6. 使用 ML.NET 对 K-Means 平均值聚类分析和分类

    数据集 :https://en.wikipedia.org/wiki/Iris_flower_data_set 聚类分析 非监管式机器学习任务,用于将数据实例分组到包含类似特性的群集. 聚类分析还可用 ...

  7. PHP引用(&)

    引用是什么 在 PHP 中引用意味着用不同的名字访问同一个变量内容.这并不像 C 的指针:例如你不能对他们做指针运算,他们并不是实际的内存地址.替代的是,引用是符号表别名.注意在PHP 中,变量名和变 ...

  8. React 如何适用less

    1.使用 create-react-app 创建的项目,默认情况下是看不到 webpack 相关的配置文件,我们需要给它暴露出来,使用下面命令即可: npm run eject 2.添加less np ...

  9. Excel填坑[0]

    Excel填坑[0] 本着一天水一贴的原则(放p),我又来填坑了.今天做一个很简单的排队图,虽然不难,但因为手机显示问题折腾了半天.感觉做图做表格不仅仅是靠技术,更重要的是思维. 就是这张图,看起来平 ...

  10. 完全卸载Oracle(亲身体验完整版)

    完全卸载Oracle 用Oracle自带的卸载程序不能从根本上卸载Oracle,从而为下次的安装留下隐患,那么怎么才能完全卸载Oracle呢? 那就是直接注册表清除,步骤如下: 开始->设置-& ...