这只一个雏形,但是可以用了。难点是如何点击每行后面的编辑按钮,让当前行的格子都变成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编写一个可以编辑的表格的更多相关文章

  1. 用react编写一个hello world

    我要分享的是用react搭建一个简单的hello world, 一个小demo, 大神请略过 首先看一下目录结构 创建一个目录, 用于存放demo mkdir reactHello cd reactH ...

  2. 放弃antd table,基于React手写一个虚拟滚动的表格

    缘起 标题有点夸张,并不是完全放弃antd-table,毕竟在react的生态圈里,对国人来说,比较好用的PC端组件库,也就antd了.即便经历了2018年圣诞彩蛋事件,antd的使用者也不仅不减,反 ...

  3. 4-13 Webpacker-React.js; 用React做一个下拉表格的功能: <详解>

    Rails5.1增加了Webpacker: Webpacker essentially is the decisions made by the Rails team and bundled up i ...

  4. React的一个简单示例

    首发:个人博客,更新&纠错&回复 React的核心是定义组件类,组件有三个要素:状态.行为.界面. 1.渲染状态到界面:状态由组件对象的state属性持有,从状态到界面的渲染工作由组件 ...

  5. React 实现一个漂亮的 Table

    概述 对于企业级后台产品来说,Table 应该是使用最频繁的组件了,它通常比 Form 和 Chart 的使用还频繁.对于这么一个常用的组件,我们决定要把它从 RSuite 中单独出来开发,并且要具有 ...

  6. JQuery实战--可以编辑的表格

    廊坊下雪了,15年的第二场雪,比14的来的稍晚一些,停靠在11教门前的自行车,成了廊坊师范学院最美丽的风景线.还记得以前学习css的时候,就曾经接触过如何编写设计一些表格和表单的样式,例如如何设计表格 ...

  7. JQuery实战总结一 可编辑的表格

    JQuery视频看完了,总结学习,记得在牛腩视频中的修改新闻类别的时候也使用了这样的可编辑的表格,使用到 了ajax控制界面不再刷新,轻松解决了类别的名称的修改的问题,直接提交到数据库,这样的方式比起 ...

  8. JQuery实战--能够编辑的表格

    廊坊下雪了.15年的第二场雪.比14的来的稍晚一些.停靠在11教门前的自行车.成了廊坊师范学院最漂亮的风景线.还记得以前学习css的时候.就以前接触过怎样编写设计一些表格和表单的样式,比如怎样设计表格 ...

  9. 实战Jquery(二)--能够编辑的表格

    今天实现的是一个表格的样例,通过获取表格的奇数行,设置背景色属性,使得奇偶行背景色不同.这个表格能够在单击时编辑,回车即更改为新输入的内容;ESC还原最初的文本.表格的实现思路非常清晰,仅仅是在实现的 ...

随机推荐

  1. tp5 Excel导入

    /** * 导入Excel功能 */ public function import(){ if (!empty($_FILES)) { $file = request()->file('impo ...

  2. CentOS6.5上安装MySQL

    1.查看操作系统的相关信息 2.查看系统上所有MySQL的rpm包并删除 [root@master ~]# rpm -qa | grep -i mysql [root@masterc ~]# yum ...

  3. 【转】使用Mybatis时遇到的延迟加载造成返回异常的问题——HttpMessageConversionException: Type definition error

    在使用Mybatis的过程中,使用了resultMap延迟加载. 延迟加载:association联表查询的过程中,查询另外两个表的对象.而延迟加载是指只有在使用这两个对象的时候才会进行查询. 问题的 ...

  4. 启动tomcat报错Status 状态为 Deployment failed

  5. Greenplum(4.3.73)集群安装手册

    1. 概述 本文档仅限于指导Greenplum 4.3.7.3(对应安装包greenplum-db-4.3.7.3-build-2-RHEL5-x86_64.bin)版本在CentOS6.5 系统进行 ...

  6. stylelint 安装配置

    1.安装 stylelint: npm i stylelint -g npm i stylelint stylelint-config-standard --save-dev 2.在 scripts ...

  7. 第一节《Git初始化》

    创建版本库以及第一次提交 首先我看查看一下git的版本,本地的git是用的yum安装方式,如果想使用源码安装请参考官方文档. [root@git ~]# git --versiongit versio ...

  8. python, generator.next()和send()

    对于普通的生成器,第一个next调用,相当于启动生成器,会从生成器函数的第一行代码开始执行,直到第一次执行完yield语句(第4行)后,跳出生成器函数. 然后第二个next调用,进入生成器函数后,从y ...

  9. 装系统时 System clock uses UTC 问题

    装系统也装了至少不下50次了,每次都是傻瓜一样的按照第一印象在弄,从未想过为啥,装到这里的时候,System clock uses UTC 勾不勾呢,每次都是百度,然后装完这一次下一次又忘了,这是没有 ...

  10. Window离线环境下如何安装pyhanlp

    Hanlp在离线环境下的安装我是没有尝试过的,分享SunJW_2017的这篇文章就是关于如何在离线环境下安装hanlp的.我们可以一起来学习一下! HanLP是一款优秀的中文自然语言处理工具,可以实现 ...