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 相关文章推荐
关于JS数组追加数组采用push.apply的问题
Jun 09 Javascript
js实现简单随机抽奖的方法
Jan 27 Javascript
原生js实现数字字母混合验证码的简单实例
Dec 10 Javascript
Javascript实现单例模式
Jan 24 Javascript
AngularJS创建自定义指令的方法详解
Nov 03 Javascript
javascript入门之window对象【新手必看】
Nov 22 Javascript
js输入框使用正则表达式校验输入内容的实例
Feb 12 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
May 20 jQuery
详解node服务器中打开html文件的两种方法
Sep 18 Javascript
vue 表单之通过v-model绑定单选按钮radio
May 13 Javascript
vue实现滑动到底部加载更多效果
Oct 27 Javascript
javascript条件式访问属性和箭头函数介绍
Nov 17 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
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
thinkPHP框架中执行事务的方法示例
2018/05/31 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
Javascript实现的分页函数
2007/02/07 Javascript
Javascript模块化编程(一)AMD规范(规范使用模块)
2013/01/17 Javascript
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
jQuery实现form表单元素序列化为json对象的方法
2015/12/09 Javascript
又一款js时钟!transform实现时钟效果
2016/08/15 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
2017/08/22 Javascript
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
vue项目中mock.js的使用及基本用法
2019/05/22 Javascript
python实现在目录中查找指定文件的方法
2014/11/11 Python
整理Python中的赋值运算符
2015/05/13 Python
深入解析Python中的集合类型操作符
2015/08/19 Python
win10环境下python3.5安装步骤图文教程
2017/02/03 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
python 日志增量抓取实现方法
2018/04/28 Python
Pandas之缺失数据的实现
2021/01/06 Python
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
幼儿园数学教学反思
2014/02/02 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
2014财产信托协议书范本
2014/11/18 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书
2015年教师节活动总结
2015/03/20 职场文书
2015年财务科工作总结范文
2015/05/13 职场文书
新课程改革心得体会
2016/01/22 职场文书
聊聊基于pytorch实现Resnet对本地数据集的训练问题
2022/03/25 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python