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 相关文章推荐
解决表单中第一个非隐藏的元素获得焦点的一个方案
Oct 26 Javascript
JS判断客服QQ号在线还是离线状态的方法
Jan 13 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
Apr 12 Javascript
JavaScript鼠标特效大全
Sep 13 Javascript
如何正确理解javascript的模块化
Mar 02 Javascript
微信小程序 动态绑定事件并实现事件修改样式
Apr 13 Javascript
微信小程序 setData的使用方法详解
Apr 20 Javascript
vue-cli项目中怎么使用mock数据
Sep 27 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
Sep 05 Javascript
解决vue props 拿不到值的问题
Sep 11 Javascript
详解JavaScript中的坐标和距离
May 27 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
Sep 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的错误信息
2006/10/09 PHP
php检查字符串中是否包含7位GSM字符的方法
2015/03/17 PHP
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
jquery实现居中弹出层代码
2010/08/25 Javascript
jQuery中even选择器的定义和用法
2014/12/23 Javascript
Javascript中的方法链(Method Chaining)介绍
2015/03/15 Javascript
jquery ui resize 中border-box的bug修正
2015/04/26 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
2015/12/02 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(一)
2015/12/10 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
ReactNative页面跳转实例代码
2016/09/27 Javascript
jQuery编写设置和获取颜色的插件
2017/01/09 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
Node学习记录之cluster模块
2017/05/31 Javascript
基于JavaScript实现评论框展开和隐藏功能
2017/08/25 Javascript
详解Node.js amqplib 连接 Rabbit MQ最佳实践
2019/01/24 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
2019/05/10 Javascript
swiper4实现移动端导航切换
2020/10/16 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
Python下使用Psyco模块优化运行速度
2015/04/05 Python
python pandas dataframe 行列选择,切片操作方法
2018/04/10 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
牵手50台湾:专为黄金岁月的单身人士而设的交友网站
2021/02/18 全球购物
幸福家庭事迹材料
2014/02/03 职场文书
企业管理毕业生求职信
2014/03/11 职场文书
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
大学迎新生标语
2014/10/06 职场文书
2014年中学生检讨书大全
2014/10/09 职场文书
银行求职信范文怎么写
2015/03/20 职场文书
中学生打架检讨书之500字
2019/08/06 职场文书
苹果发布了MagSafe固件更新,可以不外接电源实现最高7.5W充电
2022/04/21 数码科技