【发布时间】:2017-08-15 06:32:43
【问题描述】:
我正在构建一个组件<ElementList>,它接收道具中的元素数组并构建一个<List>,其中每个<ListItem> 都是数组的一个元素。
我将<ListItem> 传递给一个名为<ElementShow> 的单独组件,它包装了一个material-ui <Dialog> 组件。
当单击<ListItem> 时,它应该为特定的<ElementShow> 组件打开<Dialog>。
目前,当我单击任何<ListItem> 时,它会为数组的最后一个元素打开<Dialog>,无论我单击哪个<ListItem>。
下面是代码供参考:
元素列表.js
import React from 'react'
import {List, ListItem} from 'material-ui/List'
import Subheader from 'material-ui/Subheader'
import ElementShow from './ElementShow'
class ElementList extends React.Component {
constructor() {
super()
this.state = {
dialogOpen: false
}
}
handleOpen = () => {
this.setState({dialogOpen: true})
}
handleClose = () => {
this.setState({dialogOpen: false})
}
renderElements () {
const {elements} = this.props
if (elements.length < 1) {
return (
<ListItem
key='empty_element'
primaryText='No Elements Yet'
/>
)
} else {
return elements.map(element => {
return (
<ListItem
key={element._id}
primaryText={element.name}
onClick={this.handleOpen}
>
<ElementShow
dialogOpen={this.state.dialogOpen}
handleClose={this.handleClose} element={element} />
</ListItem>
)
})
}
}
render () {
return (
<List className='box'>
<Subheader>Elements</Subheader>
{this.renderElements()}
</List>
)
}
}
export default ElementList
ElementShow.js
import React from 'react'
import Dialog from 'material-ui/Dialog'
class ElementShow extends React.Component {
constructor (props) {
super(props)
this.state = {
open: props.dialogOpen
}
}
render () {
const { element, handleClose } = this.props
return (
<Dialog
title={element.name}
modal={false}
open={this.props.dialogOpen}
onRequestClose={handleClose}>
{element}
</Dialog>
)
}
}
export default ElementShow
我想我需要将对话状态链接到特定角色,但我还没有找到可行的方法。
感谢任何帮助/提示!
【问题讨论】:
-
不能在 ElementShow 中使用
onRequestClose代替吗?为什么父母需要传递handleClose? -
我猜父母不需要传递
handleClose。问题是我需要为每个元素附加一个 dialogOpen 状态,并能够从父组件更改它的值。
标签: javascript arrays reactjs material-ui