javascript - 反应:将状态中的所有对象键设置为false
问题描述
我有带有状态的 React 组件:
this.state={
items: [
{
label: '1 Some text',
active: true
},
{
label: '2 Some text',
active: false
},
{
label: '3 Some text',
active: false
},
{
label: '4 Some text',
active: false
}
]
}
我有一个菜单,当我点击它时,我想改变状态:
this.state.items.map(item => {
return <li onClick={}>{item.label}</li>
})
如果我单击任何菜单项,我想将其active: true
设为 ,并将所有其他菜单项设置为active: false
。
解决方案
更新:
manuOnClick=(e, label)=>{
let newState = this.state.items.map(item=>{
if(label === item.label)
{
let newItem={
label:label,
active:true
}
return newItem
}
else
{
let newItem={
label:item.label,
active:false
}
return newItem
}
})
this.setState({
items:newState
})
}
对不起,
onClick={(e,item.label)=>this.manuOnClick(e,item.label)
不正确,应该是
onClick={(e)=>this.manuOnClick(e,item.label)
尝试这个 :
manuOnClick=(e, label)=>{
let newState = this.state.items.map(item=>{
if(label === item.label)
{
let newItem={
label:label,
active:true
}
return newItem
}
else
{
return item
}
})
this.setState({
items:newState
})
}
this.state.items.map(item => {
return <li onClick={(e)=>this.manuOnClick(e,item.label)}>{item.label}</li>
})
推荐阅读
- r - 删除ggplot图例中的重复标签
- c# - 按货币代码设置列货币格式
- javascript - 删除表行时保留语义 UI 下拉值
- python - 从列表中找到两个加起来为特定数字的数字
- android - wrap_content 中的多个 SwipeRefreshLayout 和 RecyclerView
- php - CodeIgniter 选择仅将第一个值传递给 PHP 的选项
- java - 带有 EclipseLink MOXy 和外部映射文档的 JAX-WS 和 JAX-RS
- c# - 如何获取程序集的命名空间而不是其依赖项?
- orbeon - 在 Orbeon XBL 组件中验证数据
- sql - BigQuery 会话和命中级别的理解