【发布时间】:2017-05-06 02:05:29
【问题描述】:
有了这个code,我可以在一个简单的对象上成功使用setState——当我点击“Joey”时,名字会变成“Igor”。
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 要么无法将每个名称更改为“Igor”,要么必须以某种方式进行修改。
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。这里没有意外,它没有工作。
尽管我发现很多关于不变性助手的提及,但我已经研究并找不到关于此的类似问题。但我仍然不确定这是否是要走的路。
使用setState 修改嵌套在数组中的对象的最佳方法是什么?
【问题讨论】:
-
this.setState(this.state)? -
如何知道点击的是哪一个?您需要一些标识符,例如特定
Card的索引。
标签: javascript reactjs setstate