我有一個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每行的內容不同,但會顯示在對話框中使用'',但是當前選項卡不起作用。我之所以爲每一行做這件事,是因爲每個對話框對每一行都有不同的表示。我該如何解決這個問題? –