ice-admin-template

react + react-router + redux + 封装函数;代码已经封装好了常用的方法和http接口,常量,接口返回码等等,项目可以直接入手,节约开发时间

项目地址:

ice-admin-template

ice框架ice

使用:

  • 启动调试服务: npm start
  • 构建 dist: npm run build

目录结构:

  • react-router @4.x 默认采用 hashHistory 的单页应用
  • 入口文件: src/index.js
  • 导航配置: src/menuConfig.js
  • 路由配置: src/routerConfig.js
  • 路由入口: src/router.jsx
  • 布局文件: src/layouts
  • 通用组件: src/components
  • 页面文件: src/pages

效果图:

redux 与 react

redux 知识点网上很多,可自行百度,在这里实践一下

redux文件结构如下

1、引入注册

import { createStore } from 'redux'
import { Provider } from 'react-redux'import store from './store'export default <Provider store={store}><Router>{routeChildren}</Router>
</Provider>;
复制代码

当前代码中最主要的就是

import store from ./store

store.js代码如下

import {createStore, combineReducers, applyMiddleware} from 'redux';
import * as tags from './store/reducer';
import thunk from 'redux-thunk';let store = createStore(combineReducers({...tags}),applyMiddleware(thunk)
);export default store;
复制代码

redux-thunk解决异步的问题 放置这里的都是状态,也就是数据,这些数据有可能是接口数据,也有可能是Boolean的判断

action.js

action.js 与 reducer.js本身没有什么关系,到目前为止,没有把两种相关联起来, action只是纯函数而已

代码如下

import C from './../common/index';// 初始化获取标签,保存至redux
const action = {tagsListFunc() {return dispatch => {C.axios(C.api('tagList')).then(res=> {dispatch({type: 'tagsList',data: res.data || []})})}},showToastFunc() {return {type: 'showToast'}}
}
export default action;
复制代码

代码中用到dispatch函数,对应异步请求数据而不是纯return,则需要dispatch同步异步

reduce.js

./store/reduce.js

export const reducer = (state, action) => {if (!state) {return {tagsList: [],sortsList: [],loading: true}}switch (action.type) {case 'tagsList': state = Object.assign(state, {loading: false});return {...state,tagsList: action.data}break;case 'sortsList': state = Object.assign(state, {loading: false});return {...state,sortsList: action.data}break;case 'showToast':state = Object.assign(state, {loading: true});return {...state}}
}复制代码

根据action中的类型来判断return什么值到页面接受的值

调用页面

import action from './../../../../store/action'
import { connect } from 'react-redux';class TabTable extends Component {render() {return <div></div>}
}TabTable = connect(state=> {return {tagsList: state.reducer.tagsList,loading: state.reducer.loading} // reducer return回来的值
}, {tagsListFunc: action.tagsListFunc // action中的执行函数
})(TabTable)export default TabTable
复制代码

react-redcux 把react和redux链接起来了,connect也把reducer和action链接来了,使得action中retrun的值相对于赋值到reducer.js中去

在页面调用函数或调用state

this.props.tagsListFunc();
this.props.tagsList;
复制代码

ice飞冰管理系统初体验,react-redux简单入门相关推荐

  1. 我的Go+语言初体验——初学者的快速入门

    "我的Go+语言初体验" | 征文活动进行中- 一.Go+ 是什么 听说Go+发布已经有几天了,之前有接触过Go.python.php.c等语言,所以看到Go+时感觉并不陌生. 那 ...

  2. Knative 初体验:CICD 极速入门

    Knative 社区很早就在讨论用 Tekton 替换 Build 模块的相关事宜.Knative Build 官方已经正式说明不再建议使用 Knative Build 了. 如果你知道 Knativ ...

  3. Android进阶:十一、视频播放器初体验,android开发入门pdf

    编译成功之后我们就可以在代码里面用它了,这个也很简单一般不会出什么问题.ijplayer里面提供了一个IMediaPlayer,我们初始化它即可: private void initMediaPlay ...

  4. SciTE文本编辑器初体验

    SciTE文本编辑器初体验 1.简单设置SciTE文本编辑器 单击[Options]|[Open Global Options File] 打开SciTEGlobal.properties文件,做一些 ...

  5. Java开发 - 布隆过滤器初体验

    目录 前言 布隆过滤器 什么是布隆过滤器 布隆过滤器的作用 布隆过滤器原理 怎么设计布隆过滤器 布隆过滤器使用案例 安装布隆过滤器 添加依赖 添加配置 添加工具类 添加测试代码 简单测试 特别提醒​​ ...

  6. Vue初体验(七)使用Vue实现一个简单的聊天框

    1.实践是检验真理的唯一标准,现在我们做一个简易的聊天窗口,有一个input框,用于用户输入,一个按钮button,用于把用户的输入提交上去,然后又一个列表ul,用于展示我们每次提交的消息. 2.通过 ...

  7. Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验

    Net Core平台灵活简单的日志记录框架NLog初体验 前几天分享的"[Net Core集成Exceptionless分布式日志功能以及全局异常过滤][https://www.cnblog ...

  8. Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验

    Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验 前几天分享的"[Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验][http://www ...

  9. python简单体育竞技模拟_python初体验 —— 模拟体育竞技

    python初体验 -->>> 模拟体育竞技 一.排球训练营 1. 简介: 模拟不同的两个队伍进行排球的模拟比赛. 2. 模拟原理: 通过输入各自的能力值(Ⅰ),模拟比赛的进行( P ...

最新文章

  1. 4 款 MySQL 调优工具,公司大神都在用!
  2. [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之十三:在DetailsView控件中使用TemplateField...
  3. UA MATH567 高维统计I 概率不等式9 亚高斯性的推广:Orlicz空间与Orlicz范数
  4. Jenkins+Gradle+Git+Pyger+二维码搭建Android自动打包平台
  5. 【Linux】一步一步学Linux——at命令(133)
  6. 分享Web应用运行的细节问题:预编译提高网站性能、跟踪用户习惯和解决线程同步...
  7. 在mysql表中如何变换列和行_在SQL中转换列和行的简单方法?
  8. H264基本概念之 宏块、片和片组
  9. win10兼容android下载安装,Win10手机运行安卓App兼容工具下载!
  10. SVN客户端安装以及操作流程
  11. Could not find a version that satisfies the requirement tensorflow
  12. tablepc是什么平板电脑_什么是TABLET PC,TABLET PC有什么功能呢?
  13. C语言中如何求三角形最大正弦值,余弦定理求三角形面积
  14. Vue项目url中的BASE_URL解析
  15. β-半乳糖苷酶的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  16. vnc远程linux命令,用VNC实现远程桌面共享(支持Windows, Linux, …) | 易水博客
  17. 昵图网共享分下载代包下素材nipic呢图下载币图网设计素材下载
  18. Windows10精简优化无人值守安装
  19. 【3dsmax新手入门】-实体立方八面晶体绘制
  20. 蒙提霍尔问题(The Monty Hall Problem)解析(贝叶斯分析、Python仿真)

热门文章

  1. 苹果公司的专利战其实是营销战略?
  2. SF Week 2:本周好内容,请君过目
  3. 运维行业未来发展方向的规划
  4. ⚡混沌世界中的醒与痴——醒哥与九妹⚡
  5. 三菱FX3U 485ADP MB与3台施耐德ATV 71变频器通讯实战程序
  6. 比原链(Bytom)先知节点 Ubuntu接入文档
  7. 瑞萨单片机(R5F100LE)串口队列的实现和UART使用心得
  8. 微信小视频原来可以这样做
  9. R语言的数字信号处理
  10. 易创索讯-百度快照劫持网站是一个致命的伤害。