用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还原最初的文本.表格的实现思路非常清晰,仅仅是在实现的 ...
随机推荐
- java 环形链表实现约瑟夫(Joseph)问题
约瑟夫问题又名丢手绢问题.相传著名犹太历史学家 Josephus 利用其规则躲过了一场自杀游戏,而后投降了罗马. 问题: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.* 从编号为 ...
- Linux下FTP服务器(vsftpd)配置:
1. vsftpd 安装:yum install vsftpd 2. 添加用于: useradd admin -d /home/data -s /sbin/nologin usermod -d /ho ...
- (26)基于cookie的登陆认证(写入cookie、删除cookie、登陆后所有域下的网页都可访问、登陆成功跳转至用户开始访问的页面、使用装饰器完成所有页面的登陆认证)
获取cookie request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age ...
- imp导入时 出现IMP-00017:由于 ORACLE 错误 6550, 以下语句失败: 解决方法
cmd命令下--执行imp命令时,出现IMP-00017:由于 ORACLE 错误 6550, 以下语句失败: 解决办法:在imp命令里加入 statistics=none (不导入数据库统计信息) ...
- web driver下载地址(selenium-3.141_浏览器版本对应)
web driver: (Windows环境下) Firefox(上一目录可以找其他浏览器的driver) : 1)http://npm.taobao.org/mirrors/geckodriver/ ...
- JavaScript数据类型(第一天)
ECMAScript为JavaScript的标准,javascript为网景公司定义,但并不标准,所以欧洲的组织定义了ESMAScript,定义了网页脚本的标准. js组成 ECMAScript js ...
- 使用mysqlproxy实现mysql读写分离
先说一下什么是读写分离吧. 以三台虚拟机为例,搭建一主一从一代理,全部配置好之后,当从proxy插入数据时,该数据会同时插入主数据库,因为主从关系,从数据库也会有数据.当把从数据库执行slave st ...
- Python字符串列表元祖字典的公共方法
运算符 运算符 Python 表达式 结果 描述 支持的数据类型 + [1, 2] + [3, 4] [1, 2, 3, 4] 合并 字符串.列表.元组 * 'Hi!' * 4 ['Hi!', 'Hi ...
- Flask--(项目准备)--框架搭建,参数配置
项目准备: 配置参数 项目配置: 新建工程: 配置虚拟环境: 通过配置类添加配置参数: Debug配置, 初始化数据库对象, Mysql配置及数据库创建 redis配置: 端口6379和域名: 创建存 ...
- 洛谷P1636学画画
传送 这个题我们需要一个大胆的想法(虽然AC后看了题解知道这是个定理) (求证明qwq) 如果一个图有2或0个奇点,它就一定可以一笔画出,如果不是2或0个奇点,那答案就是奇点数/2 (私认为因为两个奇 ...