Javascript 地图没有';t返回正确的对象数组
尝试进行映射以将选定值设置为true和false,但它不会改变现有的true值,有什么问题Javascript 地图没有';t返回正确的对象数组,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,尝试进行映射以将选定值设置为true和false,但它不会改变现有的true值,有什么问题 selectTab = tab => e => { const { data } = this.state; this.setState( { data: data.map(o => o.tab === tab ? { selected: true, ...o } : { selected: false, ...o }
selectTab = tab => e => {
const { data } = this.state;
this.setState(
{
data: data.map(o =>
o.tab === tab ? { selected: true, ...o } : { selected: false, ...o }
)
},
() => console.log(this.state.data)
);
};
首先尝试展开对象,然后添加选定的
属性。否则,o
中的选定的
属性每次都会覆盖它
selectTab = tab => e => {
this.setState(
prevState => ({
data: prevState.data.map(o =>
o.tab === tab ? { ...o, selected: true } : { ...o, selected: false }
)
}),
() => console.log(this.state.data)
);
};
类应用程序扩展了React.Component{
状态={
数据:[
{
表1:,
内容:“表1内容”,
所选:真
},
{
表2:,
内容:“表2内容”
},
{
表3:,
内容:“表3内容”
}
]
};
选择tab=tab=>e=>{
这是我的国家(
prevState=>({
数据:prevState.data.map(o=>
o、 tab===tab?{…o,所选:true}:{…o,所选:false}
)
}),
()=>console.log(this.state.data)
);
};
render(){
const{activeTab,data}=this.state;
返回(
{data.map(obj=>(
{obj.tab}
))}
{data.map(obj=>(
{obj.selected&&obj.content}
))}
);
}
}
render(,document.getElementById(“根”))代码>
wow nice catch,是否有任何情况下您希望在最后使用spread?@DennisNgu:对于对象spread,我想不出任何使用情况,但如果是数组,则是const newArr=[…oldArr,newElement]
vsconst newArr=[newElement,…oldArr]
。这将改变产品的顺序element@DennisNgu您通常希望创建一个覆盖了某些属性的新对象,即{…o,selected:true}
,但您可能会有一个具有默认值的对象,并可能通过将对象放在末尾来覆盖它们,如const settings={logLevel:2,…o}代码>@Tholle:Ha!我从来没有想过它可以使用它的默认值!非常感谢!