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中的如何定位固定层的位置
Jun 15 Javascript
js window对象属性和方法相关资料整理
Nov 11 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
Jan 27 Javascript
原生javascript实现解析XML文档与字符串
Mar 01 Javascript
angularjs表格ng-table使用备忘录
Mar 09 Javascript
js实现精确到秒的倒计时效果
May 29 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
Jun 24 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
Aug 25 Javascript
jQuery组件easyui对话框实现代码
Aug 25 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
Mar 01 Javascript
vue页面切换项目实现转场动画的方法
Nov 12 Javascript
JavaScript中的Proxy对象
Nov 27 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动态生成虚拟现实VRML网页
2006/10/09 PHP
php中iconv函数使用方法
2008/05/24 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
基于php流程控制语句和循环控制语句(讲解)
2017/10/23 PHP
Jquery submit()无法提交问题
2013/04/21 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
javascript遍历控件实例详细解析
2014/01/10 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
2017/01/13 Javascript
支持移动端原生js轮播图
2017/02/16 Javascript
利用nodejs监控文件变化并使用sftp上传到服务器
2017/02/18 NodeJs
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
详解Vue2中组件间通信的解决全方案
2017/07/28 Javascript
vue-router中scrollBehavior的巧妙用法
2018/07/09 Javascript
详解Vue源码中一些util函数
2019/04/24 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
详解Python的Django框架中Manager方法的使用
2015/07/21 Python
Python设置默认编码为utf8的方法
2016/07/01 Python
Win10下Python环境搭建与配置教程
2016/11/18 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
python合并同类型excel表格的方法
2018/04/01 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
在Pycharm中修改文件默认打开方式的方法
2019/01/17 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
2020/05/20 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
台湾团购、宅配和优惠券:17Life
2017/08/14 全球购物
优秀老师事迹材料
2014/02/05 职场文书
社区庆中秋节活动方案
2014/02/07 职场文书
新文化运动的口号
2014/06/21 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
Go中的条件语句Switch示例详解
2021/08/23 Golang
电脑无法安装Windows 11怎么办?无法安装Win11的解决方法
2021/11/21 数码科技