用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还原最初的文本.表格的实现思路非常清晰,仅仅是在实现的 ...
随机推荐
- 微信连wifi,中文ssid报Invalid sign tosign错误
Invalid sign tosign错误如上: 是微信官方接受和回传的问题,改固定字符解决: 比如将ssid固定修改为字符串‘ssid’即可:
- 莫烦tensorflow(9)-Save&Restore
import tensorflow as tfimport numpy as np ##save to file#rember to define the same dtype and shape w ...
- iOS动画学习
学习一下动画,感谢以下大神的文章: UIView:基础动画.关键帧动画.转场动画 Core Animation :基础动画,关键帧动画,动画组,转场动画,逐帧动画 CALayer :CALaye ...
- OpenCV实现彩色图像轮廓 换背景颜色
转摘请注明:https://i.cnblogs.com/EditPosts.aspx?opt=1 有时候我们需要不一样颜色的证件照,下面就用OpenCV来实现证件照的蓝底.红底等换颜色: 代码如下: ...
- Python全栈之路----函数----嵌套函数
函数内部可以再次定义函数 要执行函数,必须调用 def func1(): print('alex') def func2(): print('eric') func2() #如果没有这一句,不会pri ...
- (26)基于cookie的登陆认证(写入cookie、删除cookie、登陆后所有域下的网页都可访问、登陆成功跳转至用户开始访问的页面、使用装饰器完成所有页面的登陆认证)
获取cookie request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age ...
- Nmap版本检测
-sV (版本检测) 打开版本检测.同时可以使用-A打开系统探测和版本探测. --allports(不为版本探测排除任何端口) 默认情况下,Nmap版本探测会跳过9100 TCP端口,也可以不理会任何 ...
- How to create an rpm package
转自:https://linuxconfig.org/how-to-create-an-rpm-package Rpm is both the package manager and the pack ...
- Spring Boot/Spring Cloud
104.什么是 spring boot? 在Spring框架这个大家族中,产生了很多衍生框架,比如 Spring.SpringMvc框架等,Spring的核心内容在于控制反转(IOC) ...
- windows 2008R2系统程序运行提示无法定位程序输入点ucrtbase.terminate
1.用python写了个脚本,打成exe程序,在一些机器上正常运行,再另外一些机器上运行提示 无法定位程序输入点ucrtbase.terminate 应该是缺少库文件支持 2.网上搜了下.https: ...