进行数组映射时更改 certain/selected 数组中的状态
changing state in certain/selected array when doing array mapping
数组映射中状态的正确使用方法是什么
我想映射一组数据。在每个项目上,我都有一个来自 material-ui 的 Menu 和 MenuItem。我处理通过更改状态打开菜单的方法。但是,如果我只使用一种状态,那么所有菜单都会打开,因为打开每个数组上的菜单我只使用 this.state.open。你知道如何让 Menu 只在 desire 数组上打开吗?感谢您的帮助。
这是我到目前为止所做的。
import React, { Component } from 'react'
import Menu from '@material-ui/core/Menu'
import MenuItem from '@material-ui/core/MenuItem'
const dataMap = [
{
id: 1,
name: "john"
}, {
id: 2,
name: "Doe"
}
]
export default class MyComponent extends Component {
state = {
open: false
}
handleClick() {
this.setState({
open: !this.state.open
})
}
render() {
const mapResult = dataMap.map((item, index) => {
const id = item.id;
const name = item.name;
return <span key={index}>
{name}
<Menu
open={this.state.open}
>
<MenuItem id={id}>First</MenuItem>
<MenuItem id={id}>Second</MenuItem>
<MenuItem id={id}>Third</MenuItem>
</Menu>
</span>
})
return (
<div>
{mapResult}
</div>
)
}
}
预期结果:
所选索引中一次只能打开一个菜单。
您可以使用数据 ID 作为状态而不是布尔值(例如 openedMenuId
)
import React, { Component } from 'react'
import Menu from '@material-ui/core/Menu'
import MenuItem from '@material-ui/core/MenuItem'
const dataMap = [
{
id: 1,
name: "john"
}, {
id: 2,
name: "Doe"
}
]
export default class MyComponent extends Component {
state = {
openedMenuId: null
}
handleClick(newOpenedMenuId) {
this.setState({
openedMenuId: newOpenedMenuId
})
}
render() {
const mapResult = dataMap.map((item, index) => {
const id = item.id;
const name = item.name;
return <span key={index}>
{name}
<Menu
open={this.state.openedMenuId === item.id}
>
<MenuItem id={id}>First</MenuItem>
<MenuItem id={id}>Second</MenuItem>
<MenuItem id={id}>Third</MenuItem>
</Menu>
</span>
})
return (
<div>
{mapResult}
</div>
)
}
}
数组映射中状态的正确使用方法是什么
我想映射一组数据。在每个项目上,我都有一个来自 material-ui 的 Menu 和 MenuItem。我处理通过更改状态打开菜单的方法。但是,如果我只使用一种状态,那么所有菜单都会打开,因为打开每个数组上的菜单我只使用 this.state.open。你知道如何让 Menu 只在 desire 数组上打开吗?感谢您的帮助。
这是我到目前为止所做的。
import React, { Component } from 'react'
import Menu from '@material-ui/core/Menu'
import MenuItem from '@material-ui/core/MenuItem'
const dataMap = [
{
id: 1,
name: "john"
}, {
id: 2,
name: "Doe"
}
]
export default class MyComponent extends Component {
state = {
open: false
}
handleClick() {
this.setState({
open: !this.state.open
})
}
render() {
const mapResult = dataMap.map((item, index) => {
const id = item.id;
const name = item.name;
return <span key={index}>
{name}
<Menu
open={this.state.open}
>
<MenuItem id={id}>First</MenuItem>
<MenuItem id={id}>Second</MenuItem>
<MenuItem id={id}>Third</MenuItem>
</Menu>
</span>
})
return (
<div>
{mapResult}
</div>
)
}
}
预期结果: 所选索引中一次只能打开一个菜单。
您可以使用数据 ID 作为状态而不是布尔值(例如 openedMenuId
)
import React, { Component } from 'react'
import Menu from '@material-ui/core/Menu'
import MenuItem from '@material-ui/core/MenuItem'
const dataMap = [
{
id: 1,
name: "john"
}, {
id: 2,
name: "Doe"
}
]
export default class MyComponent extends Component {
state = {
openedMenuId: null
}
handleClick(newOpenedMenuId) {
this.setState({
openedMenuId: newOpenedMenuId
})
}
render() {
const mapResult = dataMap.map((item, index) => {
const id = item.id;
const name = item.name;
return <span key={index}>
{name}
<Menu
open={this.state.openedMenuId === item.id}
>
<MenuItem id={id}>First</MenuItem>
<MenuItem id={id}>Second</MenuItem>
<MenuItem id={id}>Third</MenuItem>
</Menu>
</span>
})
return (
<div>
{mapResult}
</div>
)
}
}