React 全自动数据表格组件——BodeGrid的实现思路


Posted in Javascript onJune 12, 2019

表格是在后台管理系统中用的最频繁的组件之一,相关的功能有数据的新增和编辑、查询、排序、分页、自定义显示以及一些操作按钮。我们逐一深入进行探讨以及介绍我的设计思路:

表格是在后台管理系统中用的最频繁的组件之一,相关的功能有数据的新增和编辑、查询、排序、分页、自定义显示以及一些操作按钮。我们逐一深入进行探讨以及介绍我的设计思路:

新增和编辑

想想我们最开始写新增编辑页面是怎么做的,是不是一个页面一个页面的写,然后要么表单提交要么Ajax提交。后台有无数个新增和编辑的视图页,现在想想真是恐怖啊,看着都累。后面接触到kendoui的grid组件,看到只需要配置列的属性以及保存的地址就能自动完成新增和编辑功能,着实让我兴奋了一把。然而不幸的是我几乎找遍了react所有的组件库,都没找到一个类似的组件,无奈只有自己动手了。设计思路:

1、设置每一列的类型,比如文本、数字、图片、时间、bool值、下拉选择框等等。

2、为不同类型提供不同的操作组件,比如文本的input组件,图片的file组件。这样在新增和编辑的时候会根据列以及其类型生成对应的表单。

3、保存用户输入,提交至配置的url地址。

查询、排序、分页

查询、排序和分页几乎是每个表格页面必须的功能,实现方式也多种多样,这里介绍表格万能查询和排序的设计思路:

1、每一列是否可以查询应该是可以配置的。

2、针对不同的数据类型查询条件应该有所区别,比如文本有“包含”条件,数字有“大于”条件等。

3、后端的处理应该统一,为每一个查询条件编写查询逻辑是很费力不讨好的工作。

4、每一列是否可以排序是可以配置的,排序分正序和倒序. 

最后表格的请求体设计如下:

{
 "pageIndex":1,
 "pageSize":15,
 "sortConditions":[
  {
   "sortField":"name",
   "listSortDirection":1
  }
 ],
 "filterGroup":{
  "rules":[
   {
    "field":"displayName",
    "operate":"contains",
    "value":"a"
   }
  ]
 }
}

整个组件的源码还是比较复杂,这里就不深入了,有兴趣的同学可以查看react-demo中的bode-grid.js源码,地址:https://github.com/liuxx001/react-demo.git

不过使用起来还是很简单的,如下所示:

getInitialState:function () {
 let gridOptions={
  ref:this,
  title:"角色列表",
  url:{
   read:ApiPrefix+"zero/role/GetRolePagedList",
   add:ApiPrefix+"zero/role/CreateRole",
   edit:ApiPrefix+"zero/role/UpdateRole",
   delete:ApiPrefix+"zero/role/DeleteRole"
  },
  columns:[
   {title:"角色名",data:"name",type:"text",editor:{},query:true},
   {title:"显示名",data:"displayName",type:"text",editor:{},query:true},
   {title:"是否静态角色",data:"isStatic",type:"switch",editor:{},query:true},
   {title:"是否默认角色",data:"isDefault",type:"switch",editor:{},query:true},
   {title:"操作选项",type:"command",actions:[{name:"设置权限",onClick:showPermissionModel}]}
  ]
 };
 return {
  gridOptions: gridOptions
 };
}

很少的代码就能完全实现表格的展示、新增、编辑、排序、查询、分页等功能,显示效果:

BodeGrid表格api:

参数 类型 说明 默认值
ref object ref指向本身,用于行内按钮绑定数据 ref:this,固定写法
title string 表格标题  
url object 远程api接口配置  
columns array[object] 表格列属性配置  
actions array[object] 表格右上角自定义按钮  
pageSize number 每页显示数量 15
pageSizeOptions array[string] 可选显示数量 ["10","15","20","30","50","100"]
sortField string 初始排序字段 第一列
sortDirection string 初始排序方式 desc

columns属性详细介绍:

React 全自动数据表格组件——BodeGrid的实现思路

总结

以上所述是小编给大家介绍的React 全自动数据表格组件——BodeGrid的实现思路 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
JavaScript 放大镜 放大倍率和视窗尺寸
May 09 Javascript
javascript设计模式之工厂模式示例讲解
Mar 04 Javascript
JavaScript实现文字跟随鼠标特效
Aug 06 Javascript
jquery实现的蓝色二级导航条效果代码
Aug 24 Javascript
jQuery实现图片预加载效果
Nov 27 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
Dec 13 Javascript
Bootstrap的基本应用要点浅析
Dec 19 Javascript
Vue2学习笔记之请求数据交互vue-resource
Feb 23 Javascript
分分钟学会vue中vuex的应用(入门教程)
Sep 14 Javascript
JavaScript中为事件指定处理程序的五种方式分析
Jul 27 Javascript
基于javascript处理nginx请求过程详解
Jul 07 Javascript
微信小程序实现页面监听自定义组件的触发事件
Nov 01 Javascript
详解如何提升JSON.stringify()的性能
Jun 12 #Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
Jun 12 #Javascript
浅谈webpack 四个核心概念之Entry
Jun 12 #Javascript
vue安装遇到的5个报错及解决方法
Jun 12 #Javascript
深入学习JavaScript 高阶函数
Jun 11 #Javascript
javascript防抖函数debounce详解
Jun 11 #Javascript
详解ng-alain动态表单SF表单项设置必填和正则校验
Jun 11 #Javascript
You might like
模拟xcopy的函数
2006/10/09 PHP
php快递单号查询接口使用示例
2014/05/05 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
2014/09/16 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
PHP+JavaScript实现无刷新上传图片
2017/02/21 PHP
JavaScript操作XML 使用百度RSS作为新闻源示例
2012/02/17 Javascript
window.open以post方式将内容提交到新窗口
2012/12/26 Javascript
JS完成代码前最好对其做5件事
2013/04/07 Javascript
js动态创建及移除div的方法
2015/06/03 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
基于vue实现分页/翻页组件paginator示例
2017/03/09 Javascript
如何理解Vue的.sync修饰符的使用
2017/08/17 Javascript
详解vue中组件参数
2018/07/09 Javascript
JavaScript中的 new 命令
2019/05/22 Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
2019/12/25 jQuery
js实现上下左右键盘控制div移动
2020/01/16 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
python3实现读取chrome浏览器cookie
2016/06/19 Python
python如何为被装饰的函数保留元数据
2018/03/21 Python
pybind11和numpy进行交互的方法
2019/07/04 Python
基于Python执行dos命令并获取输出的结果
2019/12/30 Python
CSS3,线性渐变(linear-gradient)的使用总结
2017/01/09 HTML / CSS
CSS3属性 line-clamp控制文本行数的使用
2020/03/19 HTML / CSS
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
美国运动鞋和运动服零售商:Footaction
2017/04/07 全球购物
POS解决方案:MUNBYN(热敏打印机、条形码扫描仪)
2020/06/09 全球购物
Linux内核产生并发的原因
2012/07/13 面试题
会计找工作求职信范文
2013/12/09 职场文书
出国导师推荐信
2014/01/16 职场文书
高考备战决心书
2014/03/11 职场文书
拉拉队口号
2014/06/16 职场文书
农村党员对照检查材料
2014/09/24 职场文书
捐助感谢信
2015/01/22 职场文书
辩护意见书
2015/06/04 职场文书
pycharm代码删除恢复的方法
2021/06/26 Python