用react编写一个可以编辑的表格
这只一个雏形,但是可以用了。难点是如何点击每行后面的编辑按钮,让当前行的格子都变成input。
import {Component} from 'react'
const Action = props => {
console.log(props)
return (
<div>
<button type='button' onClick={props.editCb}>{props.tr.edit
? '保存'
: '编辑'}</button>
<button type='button' onClick={props.tr.edit? props.saveCb: Number}>取消</button>
</div>
);
};
class Table extends Component {
constructor(props, context) {
super(props, context);
this.state = {
headers: {
name: "名称",
path: "路径映射",
action: ""
},
trs: [
{
name: "定时任务",
path: "/xxxx",
action: "",
edit: false
}, {
name: "定时任务2",
path: "/yyyy",
action: "",
edit: false
}
]
};
}
onSave(data) {
//点击取消按钮时还原该行为显示狀态
data.edit = false
if (data._initName !== undefined) {
data.name = data._initName
data.path = data._initPath
// data._initName = data._initPath = undefined
this.forceUpdate()
}
}
onEdit(data) {
//点击取消按钮时还原该行为编辑狀态,再点击还原
var editable = data.edit = !data.edit
if (editable) {
data._name = data.name
data._initName = data.name
data.name = <input
defaultValue={data._name}
onInput={(e) => {
data._name = e.target.value;
}}/>
data._path = data.path
data._initPath = data.path
data.path = <input
defaultValue={data._path}
onInput={(e) => {
data._path = e.target.value;
}}/>
this.forceUpdate()
} else {
data.name = data._name
data.path = data._path
this.forceUpdate()
}
}
render() {
var headers = this.state.headers || {};
var keys = Object.keys(headers);
console.log(headers);
return (
<table>
<thead>
<tr>
{keys.map(key => <th>
{headers[key]}
</th>)}
</tr>
</thead>
<tbody>
{this
.state
.trs
.map(function (tr) {
return (
<tr>
{keys
.map(function (key, index) {
return (
<td key={key}>
{key === "action"
? <Action
tr={tr}
saveCb={this
.onSave
.bind(this, tr)}
editCb={this
.onEdit
.bind(this, tr)}/>
: tr[key]
}
</td>
)
}, this)}
</tr>
)
}, this)}
</tbody>
</table>
)
}
}
ReactDOM.render(<Table />, document.body)
用react编写一个可以编辑的表格的更多相关文章
- 用react编写一个hello world
我要分享的是用react搭建一个简单的hello world, 一个小demo, 大神请略过 首先看一下目录结构 创建一个目录, 用于存放demo mkdir reactHello cd reactH ...
- 放弃antd table,基于React手写一个虚拟滚动的表格
缘起 标题有点夸张,并不是完全放弃antd-table,毕竟在react的生态圈里,对国人来说,比较好用的PC端组件库,也就antd了.即便经历了2018年圣诞彩蛋事件,antd的使用者也不仅不减,反 ...
- 4-13 Webpacker-React.js; 用React做一个下拉表格的功能: <详解>
Rails5.1增加了Webpacker: Webpacker essentially is the decisions made by the Rails team and bundled up i ...
- React的一个简单示例
首发:个人博客,更新&纠错&回复 React的核心是定义组件类,组件有三个要素:状态.行为.界面. 1.渲染状态到界面:状态由组件对象的state属性持有,从状态到界面的渲染工作由组件 ...
- React 实现一个漂亮的 Table
概述 对于企业级后台产品来说,Table 应该是使用最频繁的组件了,它通常比 Form 和 Chart 的使用还频繁.对于这么一个常用的组件,我们决定要把它从 RSuite 中单独出来开发,并且要具有 ...
- JQuery实战--可以编辑的表格
廊坊下雪了,15年的第二场雪,比14的来的稍晚一些,停靠在11教门前的自行车,成了廊坊师范学院最美丽的风景线.还记得以前学习css的时候,就曾经接触过如何编写设计一些表格和表单的样式,例如如何设计表格 ...
- JQuery实战总结一 可编辑的表格
JQuery视频看完了,总结学习,记得在牛腩视频中的修改新闻类别的时候也使用了这样的可编辑的表格,使用到 了ajax控制界面不再刷新,轻松解决了类别的名称的修改的问题,直接提交到数据库,这样的方式比起 ...
- JQuery实战--能够编辑的表格
廊坊下雪了.15年的第二场雪.比14的来的稍晚一些.停靠在11教门前的自行车.成了廊坊师范学院最漂亮的风景线.还记得以前学习css的时候.就以前接触过怎样编写设计一些表格和表单的样式,比如怎样设计表格 ...
- 实战Jquery(二)--能够编辑的表格
今天实现的是一个表格的样例,通过获取表格的奇数行,设置背景色属性,使得奇偶行背景色不同.这个表格能够在单击时编辑,回车即更改为新输入的内容;ESC还原最初的文本.表格的实现思路非常清晰,仅仅是在实现的 ...
随机推荐
- 如何执行Python代码
1.在linux系统中执行代码有两种方法 a.在脚本的当前目录下执行:python test.py b.给脚本赋予可执行权限,然后执行代码 chmod +x test.py test.py 2.在wi ...
- scrapy中selenium的应用
引入 在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载的情况发生,如果直接使用scrapy对其url发请求,是绝对获取不到那部分动态加载出来的数据值.但是通过观察我们会发现 ...
- 为什么要将Apache与Tomcat集成?(或不)
Why should I integrate Apache with Tomcat? (or not) There are many reasons to integrate Tomcat with ...
- JUnit4测试报错:class not found XXX
初学java框架,最近用eclipse跟着视频坐淘淘商城这个项目,其中使用了JUnit4做单元测试.当运行测试代码时,项目报错:class not found xxx. 借助了其他大神的博客,论坛等 ...
- javascript继承的6种方法
1原型式继承 简介:对类式继承的封装,过渡对象相当于子类. function inheritObject(o) { //声明过渡函数对象 function F() {} //过渡对象的原型继承父类 F ...
- MySQL 5.7以上 root用户默认密码问题【转】
https://www.yanning.wang/archives/379.html 废话少说一句话系列: CentOS系统用yum安装MySQL的朋友,请使用 grep "temporar ...
- 关于JVM的一些冷知识
(1) Java加载类的一般顺序: 1.静态属性,静态方法声明,静态块. 2.动态属性,普通方法声明,构造块. 3.构造方法. 当加载一个类时,JVM会根据属性的数据类型第一时间赋默认值(一举生成的) ...
- 记录一次mysql查询速度慢造成CPU使用率很高情况
1.某日zabbix告警,某台机器CPU使用率过高. 查看慢查询日志,看到很多sql语句都超过10秒 把sql语句拿出来放在查询窗口执行.前面加上explain就可以查看详细查询信息 playcode ...
- icomoon:生成字体图标的方法并应用
字体图标任意缩放不会失真,也大大减少请求数量,非常好用. 在线生成工具:https://icomoon.io/app/#/select 在线SVG图库(阿里), 用于导入:http://www.ic ...
- Hadoop与MPP是什么关系?有什么区别和联系?
HADOOP与MPP是什么关系?有什么区别和联系? 适用范围.应用领域分别是什么? 其实MPP架构的关系型数据库与Hadoop的理论基础是极其相似的,都是将运算分布到节点中独立运算后进行结果合并.个人 ...