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 相关文章推荐
ASP.NET jQuery 实例2 (表单中使用回车在TextBox之间向下移动)
Jan 13 Javascript
JS实现可改变列宽的table实例
Jul 02 Javascript
随鼠标上下滚动的jquery代码
Dec 05 Javascript
js之ActiveX控件使用说明 new ActiveXObject()
Mar 03 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
Jun 12 Javascript
基于JS代码实现实时显示系统时间
Jun 16 Javascript
超全面的javascript中变量命名规则
Feb 09 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
Jun 14 Javascript
深入理解React中何时使用箭头函数
Aug 23 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
Mar 14 Javascript
vue中使用vue-cli接入融云实现即时通信
Apr 19 Javascript
详解mpvue实现对苹果X安全区域的适配
Jul 31 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
《Re:从零开始的异世界生活 冰结之绊》
2020/04/09 日漫
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
PHP 飞信好友免费短信API接口开源版
2010/07/22 PHP
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
PHP实现上传文件并存进数据库的方法
2015/07/16 PHP
PHP在线书签系统分享
2016/01/04 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
将CKfinder整合进CKEditor3.0的新方法
2010/01/10 Javascript
JavaScript DOM 学习第七章 表单的扩展
2010/02/19 Javascript
TreeView 用法(有代码)(asp.net)
2011/07/15 Javascript
node.js中的fs.chownSync方法使用说明
2014/12/16 Javascript
微信小程序 获取相册照片实例详解
2016/11/16 Javascript
Node.js复制文件的方法示例
2016/12/29 Javascript
js实现图片加载淡入淡出效果
2017/04/07 Javascript
使用重写url机制实现验证码换一张功能
2017/08/01 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
vue实现图片上传功能
2020/05/28 Javascript
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
python中的内置函数getattr()介绍及示例
2014/07/20 Python
详解Python中的__getitem__方法与slice对象的切片操作
2016/06/27 Python
利用Django内置的认证视图实现用户密码重置功能详解
2017/11/24 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
django框架模板中定义变量(set variable in django template)的方法分析
2019/06/24 Python
Python多叉树的构造及取出节点数据(treelib)的方法
2019/08/09 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
拉丁舞学习者的自我评价
2013/10/27 职场文书
员工培训邀请函
2014/02/02 职场文书
广告学专业求职信
2014/06/19 职场文书
体育个人工作总结
2015/02/09 职场文书
中学生自我评价范文
2015/03/03 职场文书
2019企业文化管理制度范本!
2019/08/06 职场文书
vue route新窗口跳转页面并且携带与接收参数
2022/04/10 Vue.js
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript