通過這個code,我可以成功地在一個簡單的物體上使用setState
- 當我點擊「Joey」時,名稱變爲「Igor」。如何在嵌套在React JS數組中的對象使用`setState`?
class Card extends React.Component {
myFunc =() => {this.props.change('Igor')};
render() {
return (
<p onClick={this.myFunc}>{this.props.name}</p>
)
}
}
class Parent extends React.Component {
constructor(props) {
super(props)
this.state = { name: "Joey" }
}
toggle = (newname) => {
this.setState((prevState, props) => ({
name: newname
}));
}
render() {
return (
<Card change={this.toggle} name={this.state.name} />
);
}
}
但是與此code,其具有嵌套在一個陣列中的多個對象,setState
或者不能夠將每個名稱改變爲「伊戈爾」或它必須以某種方式被修改。
class Card extends React.Component {
myFunc =() => {this.props.change('Igor')};
render() {
return (
<p onClick={this.myFunc}>{this.props.name}</p>
)
}
}
class Parent extends React.Component {
constructor(props) {
super(props)
this.state = {
names: [
{
name: "Joey"
},
{
name: "Sally"
},
{
name: "Billy"
},
]
}
}
toggle = (newname) => {
this.setState((prevState, props) => ({
// what can I put here to change the name I click on to "Igor"
}));
}
render() {
const names = this.state.names.map((name, index) => (
<Card key={index} change={this.toggle} {...name} />
))
return (
<div>
{names}
</div>
);
}
}
即使我知道這是setState
工作並不怎麼樣,我試圖通過傳遞index
然後寫this.state.names[index].name: newname
訪問name
。這裏沒有驚喜,它沒有奏效。
我已經研究過,無法在SO上找到類似的問題,儘管我發現了很多關於不變性幫助者的提及。但我仍然不確定這是否是一條路。
使用setState
修改嵌套在數組中的對象的最佳方法是什麼?
'this.setState(this.state)'? –
你怎麼知道哪一個被點擊?你需要一些標識符,比如特定「卡片」的索引。 – Li357