この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
にアクセスしようとしない方法を知っているにもかかわらず。驚きはありませんが、うまくいきませんでした。
不変性ヘルパーに関して多くの言及がありましたが、私は研究しており、これに関する同様の質問は見つかりません。しかし、私はそれが行く方法であるかどうかまだ分かりません。
setState
を使用して配列にネストされたオブジェクトを変更する最も良い方法は何ですか?
'this.setState(this.state)'? –
クリックしたことをどのように知っていますか?特定の「カード」のインデックスなどの識別子が必要です。 – Li357