我有一个Material-UI的<Table>
,并且在<TableBody>
的每个<TableRow>
(它是动态呈现的)中,我想为其中一列提供一个按钮(<FlatButton>
)。一旦按钮被点击,它会打开一个<Dialog>
,并在其内部想要有一个工作<Tabs>
。ReactJS + Material-UI:如何在每个TableRow中使用Material-UI的FlatButton和对话框?
那么我怎样才能显示一个特定列的每一行<FlatButton>
,当点击该按钮时,显示<Dialog>
以及作为内容的内部工作<Tabs>
?在外面点击时有<Dialog>
关闭吗?
到目前为止,我有以下,但遇到下列问题就来了:在打开了,但它是缓慢的,点击<Dialog>
外不打烊吧,<Tabs>
是可见的,但它不工作:
主要表:
import React, { Component } from 'react'
import {
Subheader,
Table,
TableBody,
TableHeader,
TableHeaderColumn,
TableRow,
} from 'material-ui'
import RenderedTableRow from ‘./RenderedTableRow'
export default class MainTable extends Component {
constructor() {
super()
}
render() {
return (
<div>
<div>
<Subheader>Table</Subheader>
<Table
multiSelectable={true}
>
<TableHeader
displaySelectAll={true}
enableSelectAll={true}
>
<TableRow>
<TableHeaderColumn>
Col 1
</TableHeaderColumn>
<TableHeaderColumn>
Col 2
</TableHeaderColumn>
<TableHeaderColumn>
Col 3
</TableHeaderColumn>
</TableRow>
</TableHeader>
<TableBody
deselectOnClickaway={false}
stripedRows
>
<RenderedTableRow {...this.props}/>
</TableBody>
</Table>
</div>
</div>
)
}
}
渲染表行:
import React, { Component } from 'react'
import { Dialog, FlatButton, Tabs, Tab, TableRow, TableRowColumn } from 'material-ui'
import ContentAdd from 'material-ui/svg-icons/content/add';
export default class RenderedTableRow extends Component {
constructor(props) {
super(props)
this.state = {
open: false,
}
this._handleOpen = this._handleOpen.bind(this)
this._handleClose = this._handleClose.bind(this)
}
_handleOpen() {
this.setState({
open: true
})
}
_handleClose() {
this.setState({
open: false
})
}
render() {
const {
children,
...rest
} = this.props
const actions = [
<FlatButton
label="Cancel"
primary={true}
onClick={this._handleClose}
/>,
]
return (
<TableRow {...rest}>
{children[0]}
<TableRowColumn>Red</TableRowColumn>
<TableRowColumn>John, Joshua</TableRowColumn>
<TableRowColumn>
<FlatButton
icon={<ContentAdd/>}
onClick={this._handleOpen}
/>
</TableRowColumn>
<Dialog
actions={actions}
autoScrollBodyContent={true}
open={this.state.open}
onRequestClose={this._handleClose}
modal={false}
title='Test'
>
<Tabs>
<Tab label="Item One" >
<div>
<h2 >Tab One</h2>
<p>
This is an example tab.
</p>
</div>
</Tab>
<Tab label="Item Two" >
<div>
<h2>Tab Two</h2>
<p>
This is another example tab.
</p>
</div>
</Tab>
</Tabs>
</Dialog>
</TableRow>
)
}
}
谢谢你在前进,并会接受/给予好评的答案。
会在对话框中显示什么?对于每一行你生成一个新的对话框 - 是否有必要?如你所说,它会很慢。更好的方法是在主表组件中有一个Dialog元素并传递必要的道具。 – szymonm
我想将对话框移到表格外,将回调传递给表格行中的按钮,点击后,打开对话框并将选定的行传递给它 – Mateusz
@szymonm每行的内容不同,但会显示在对话框中使用'',但是当前选项卡不起作用。我之所以为每一行做这件事,是因为每个对话框对每一行都有不同的表示。我该如何解决这个问题? –