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 相关文章推荐
jQuery 在光标定位的地方插入文字的插件
May 10 Javascript
用js写了一个类似php的print_r输出换行功能
Feb 18 Javascript
在JS数组特定索引处指定位置插入元素
Jul 27 Javascript
js实现使用鼠标拖拽切换图片的方法
May 04 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
Sep 04 Javascript
详细总结Javascript中的焦点管理
Sep 17 Javascript
原生JS京东轮播图代码
Mar 22 Javascript
AngularJS获取json数据的方法详解
May 27 Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
May 06 Javascript
vue-cli监听组件加载完成的方法
Sep 07 Javascript
JS实现数组深拷贝的方法分析
Mar 06 Javascript
json.stringify()与json.parse()的区别以及用处
Jan 25 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
一个PHP+MSSQL分页的例子
2006/10/09 PHP
JS实现php的伪分页
2008/05/25 PHP
linux系统上支持php的 iconv()函数的方法
2011/10/01 PHP
第三章 php操作符与控制结构代码
2011/12/30 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
Laravel5.1自定义500错误页面示例
2016/10/09 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
2020/05/02 PHP
Javascript Throttle & Debounce应用介绍
2013/03/19 Javascript
js操纵跨frame的三级联动select下拉选项实例介绍
2013/05/19 Javascript
Javascript的&&和||的另类用法
2014/07/23 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
node.js中的fs.utimes方法使用说明
2014/12/15 Javascript
javascript实现回到顶部特效
2015/05/06 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
js鼠标点击图片切换效果实现代码
2015/11/19 Javascript
Vue2.x中的Render函数详解
2017/05/30 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
2019/03/05 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
基于JavaScript实现简单抽奖功能代码实例
2020/10/20 Javascript
tensorflow实现简单的卷积网络
2018/05/24 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
2018/06/22 Python
python实现共轭梯度法
2019/07/03 Python
关于numpy数组轴的使用详解
2019/12/05 Python
如何理解Python中包的引入
2020/05/29 Python
Python matplotlib可视化实例解析
2020/06/01 Python
Python自动化操作实现图例绘制
2020/07/09 Python
深入了解Python 方法之类方法 & 静态方法
2020/08/17 Python
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
当x.equals(y)等于true时,x.hashCode()与y.hashCode()可以不相等,这句话对不对
2015/05/02 面试题
铲车司机岗位职责
2014/03/15 职场文书
2015年学生会部门工作总结
2015/04/21 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL