1.安装dva-cli

  • npm install dva-cli -g

2.创建应用

  dva new dvadashboard

  [dvadashboard为项目名]

3.安装mockjs

  •   npm install mockjs --save

4.配置mockjs

  •   打开.roadhogrc.mock.js 设置如下
const fs=require('fs');
const path=require('path');
const mockPath=path.join(__dirname+'/mock');const mock={};
fs.readdirSync(mockPath).forEach(file=>{Object.assign(mock,require('./mock/'+file));
});module.exports=mock;

5.模拟用户管理API

  mock文件夹下新建user.js

  

  API设置:

  这里只模拟俩个api  1.获取所有用户数据  2.添加用户

const Mock=require('mockjs');let db=Mock.mock({'data|3-6':[{id:'@id',name:'@name','age|18-32':1}]
});module.exports={[`GET /api/users`](req,res){res.status(200).json(db);},[`POST /api/users`](req,res){let user=req.body;console.log(req);user.id=Mock.mock('@id');db.data.push(user);res.status(200).json(user);}
}

 接下来看一下api能不能使用, 进入项目目录, 执行 npm start 启动  

  进入默认页面  默认端口号 8000  如下是项目启动后默认页面

  访问下api   http://localhost:8000/api/users     好了,可以访问  成功返回模拟用户列表数据

  

6.安装antd

  

  • npm install antd babel-plugin-import --save

  babel-plugin-import 是用来按需加载 antd 的脚本和样式的

  安装完成后,配置使用antd  修改.roadhogrc文件

  添加 ["import",{ "libraryName":"antd","style":"css" }]   最后文件如下所示:

{"entry": "src/index.js","env": {"development": {"extraBabelPlugins": ["dva-hmr","transform-runtime",["import",{ "libraryName":"antd","style":"css" }]]},"production": {"extraBabelPlugins": ["transform-runtime",["import",{ "libraryName":"antd","style":"css" }]]}}
}

7.定义路由

  •   在src/routes/ 文件夹下新建 usersPage.js

  这可能是最简单的一个页面了

import { connect } from 'dva';const UserPage=()=>{return (<div><h1>UserPage</h1></div>);
};export default connect()(UserPage);
  • 注册路由信息  修改src/router.js文件

  顺手加了个组件动态加载

import React from 'react';
import { Router, Route, Switch } from 'dva/router';
import dynamic from 'dva/dynamic';
import IndexPage from './routes/IndexPage';function RouterConfig({ history,app }) {const UserPage=dynamic({app,component:()=>import('./routes/usersPage')});return (<Router history={history}><Switch><Route path="/" exact component={IndexPage} /><Route path="/users" exact component={UserPage} /></Switch></Router>);
}export default RouterConfig;

查看一下路由配置效果  访问http://localhost:8000/#/users

显示内容了

8.添加与服务端通讯

  •   修改src/utils/request.js如下  用于提供基础的ajax数据访问

  也有不少使用axio的 具体优缺点还没研究。

import fetch from 'dva/fetch';const checkStatus=(response)=>{if(response.status>=200 && response.status<=200){return response;}const error=new Error(response.statusText);error.response=response;throw error;
};export default async function request(url,options={}) {options.headers={'Content-Type':'application/json'}const response=await fetch(url,options);checkStatus(response);const data=await response.json();return data;
}

这里为了理解简单  省略一层 user.service (封装基础ajax通讯 提供业务接口)  在业务层中直接调用request里方法 【只是为了学习方便】

  • 然后在src/models下新建user.js
import request from '../utils/request';
const User={namespace:"user",state:{list:[],visibleModal:false},reducers:{save(state,{ payload:{ data:list } }){return {...state,list};}},effects:{* query({},{ call,put }){const { data }=yield call(request,'/api/users',{ method:'GET' });yield put({type:'save',payload:{ data }});},* create({ payload:{ user } },{ call,put }){yield call(request,'/api/users',{ body:JSON.stringify(user),method:'POST'});yield put({type:'query',payload:{  }});}}, subscriptions:{setup({ dispatch,history }){console.log('running subscriptions ...');return history.listen(({ pathname,search })=>{console.log(`pathname: ${pathname}`);dispatch({ type:'query'});});}}
};export default User;

这里主要体现dva对redux react-saga的封装处理  一目了然了

  • 然后注册model  修改路由处代码为:
import React from 'react';
import { Router, Route, Switch } from 'dva/router';
import dynamic from 'dva/dynamic';
import IndexPage from './routes/IndexPage';function RouterConfig({ history,app }) {const UserPage=dynamic({app,models:()=>[import('./models/user')],component:()=>import('./routes/usersPage')});return (<Router history={history}><Switch><Route path="/" exact component={IndexPage} /><Route path="/users" exact component={UserPage} /></Switch></Router>);
}export default RouterConfig;

9.新建用户数据列表组件 使用antd的Tabel承载

顺手也把添加用户的表单建了吧

user.js

import { Table,Button } from 'antd';
import { connect } from 'dva';
import UserModal from './create';const UserTable = ({ list,dispatch }) => {const createUser=(user)=>{dispatch({type:'user/create',payload:{user}});};const columns=[{Title:'ID',dataIndex:'id'},{Title:'NAME',dataIndex:'name'},{Title:'AGE',dataIndex:'age'}];return (<div><UserModal record={ {} } ok={ createUser }><Button type="primary">NEW</Button></UserModal><Tablecolumns={ columns }dataSource={ list }rowKey={ t=>t.id }pagination={ false }>{/* users datatable */}</Table></div>);
};export default connect(({ user }) => {console.log(user);return {list: user.list};
})(UserTable);

create.js

import React,{ Component } from 'react';
import { Modal,Form,Input } from 'antd';class UserModal extends Component{constructor(props){super(props);this.state={visible:false};}render(){const { children,form:{ getFieldDecorator },record,ok }=this.props;const showModal=()=>{this.setState({visible:true});};const hideModal=()=>{this.setState({visible:false});};const save=()=>{this.props.form.validateFields((err,val)=>{//val ==> record// console.log(val);ok(val);hideModal();});};return (<div><span onClick={ showModal }>{ children }</span><Modaltitle="Create User"visible={ this.state.visible }onCancel={ hideModal }onOk={ save }><Form><Form.Item label="Name">{getFieldDecorator('name', {initialValue: record.name})(<Input />)}</Form.Item><Form.Item>{getFieldDecorator('age',{initialValue:record.age})(<Input />)}</Form.Item></Form></Modal></div>);};
}export default Form.create()(UserModal);

usersPage.js

import { connect } from 'dva';
import Main from '../components/layout/main';
import UserTable from '../components/user/user';const UserPage=()=>{return (<Main><h1>UserPage</h1><UserTable /></Main>);
};export default connect()(UserPage);

10.效果演示

11.源码下载

https://pan.baidu.com/s/1bo1R7o7

原文发布时间为:2017年12月21日
原文作者: gaojinbo010

本文来源:开源中国 如需转载请联系原作者

dva + antd + mockjs 实现用户管理相关推荐

  1. react+dva+antd的骚操作

    文章目录 前言: 第一步: 第二步, 第三步, 第四步, 第五步, 第六步, 第七步, 第八步, 第九步, 第10步, 个人博客 前言: 原谅我直接跳过react的基础,直接就讲react+dva的实 ...

  2. 【前端】Vue+Element UI案例:通用后台管理系统-用户管理:Table表格增删查改、Pagination分页、搜索框

    文章目录 目标 代码 0.结构 1.按钮-删除 2.按钮-编辑 3.debug 4.样式 5.分页Pagination:功能 6.分页Pagination:样式 7.搜索框:功能 8.搜索框:样式 总 ...

  3. 【前端】Vue+Element UI案例:通用后台管理系统-用户管理:Form表单填写、Dialog对话框弹出

    文章目录 目标 代码 0.页面结构 1.新增按钮和弹出表单:结构 2.新增按钮和弹出表单:点击新增弹出表单 3.表单样式 4.表单验证 5.表单的提交和取消功能:接口.mock相关准备 6.表单的提交 ...

  4. 【单页面博客从前端到后端】基于 DVA+ANTD 搭建博客前后台界面

    在上篇文章我们已经搭建好了基础的开发环境,接下来会介绍如何引入 DVA 和 ANTD ,以及在引入过程中需要注意的问题.这里只会详细的书写部分组件,其他的组件都是大同小异.你可以在 github仓库 ...

  5. umi+dva+antd项目搭建

    umi+dva+antd 项目搭建 说明 设计特点 创建应用 目录 注意特点 约定式路由 嵌套路由 Scroll to top 页面间跳转 配置config/config.js(或.umirc.js) ...

  6. Saltstack 用户管理

    最近测试组来了一大波,最为公司测试那必须要有qa环境,测试组老大跟我关系很好,他们组不少人对Linux也很了解,平时弄个东西啥的也能自己搞定,软磨硬泡加上最近真的很忙给他们配置了jenkins和开了q ...

  7. puppet aix之自动化用户管理

    一.    用户组的管理 (一)   Puppet组管理特性 1.   manages_aix_lam 用来管理AIX的LAM(Loadable Authentication Module)系统. 2 ...

  8. OA项目12:系统管理之用户管理

    首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频我的文字版实践笔记,本人用此来加强巩固自己开发知识,如有网友转载,请注明.谢谢. 一 之前在第8节时已经将User实体及映射文件建立好了,所 ...

  9. 用户管理之用户的查询获取

    用户管理 在用户页面我们需要完成两个功能: 1.用户信息的查询获取 2.增加用户 用户的查询获取 [获取单一数据和多个数据可以通过判断合并到一块写代码] 接口分析 请求方式:GET /meiduo_a ...

最新文章

  1. SIFT和SURF的替换算法——ORB (Oriented FAST and Rotated BRIEF 快速定向和旋转)
  2. PowerShell 6.2 PSCommandNotFoundSuggestion
  3. android ip 黑白名单,GaussDB T 单机 IP黑白名单配置
  4. ECharts 实现人民的名义关系图谱 代码开源
  5. (七)webStorage使用实例——webStorage作为简易数据库来使用
  6. 有没有通过代码退出程序的方法--官方解答
  7. 电脑文件夹可以分屏的软件_电脑上什么便签软件可以添加音频?
  8. 使用python学线性代数_二项式过程| 使用Python的线性代数
  9. Eclipse SonarLint 插件 “SonarLint processing file 。。。 lombok/launch/PatchFixesHider“ 解决办法
  10. 总结《Ray Tracing in One Weekend》
  11. 在Android关机中插入脚本
  12. 小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_45、SpringBoot2.x日志讲解和Logback配置实战...
  13. 教你怎么用爬虫程序采集企业信息及电话邮箱等信息(以企查查为例)
  14. java递归画谢尔宾斯基三角形
  15. 懒人神器:svg-sprite-loader实现自己的Icon组件
  16. 闲鱼如何高效打造一个多业务、低侵入的搜索链路
  17. keil出现no source“: Error: command-line: #564: cannot open解决方法
  18. Python 实现获取【昨天】日期
  19. 51单片机流水灯:控制LED亮暗顺序
  20. 去除空格的正则表达式

热门文章

  1. Spring+SpringMVC+shiro+mysql(一)
  2. 面向过程(结构化)分析方法与面向对象分析方法的区别
  3. poj3280Cheapest Palindrome(记忆化)
  4. 同花顺的数据格式总览(转帖)
  5. 明朝是中国历史上最有骨气的王朝?【ZZ】
  6. “分布式哈希”和“一致性哈希”的概念与算法实现
  7. C#中方法参数的四种类型
  8. Asp.Net 动态生成验证码
  9. 跨平台PHP调试器设计及使用方法——探索和设计
  10. OpenCV中OpenCL模块函数