我试图只更改reviews
数组中一个特定数组项的状态。如何做到这一点?这个代码似乎不起作用:
this.setState({
reviews[2].current: true
});
这是完整的代码:
import React, { Component } from "react";
import { render } from "react-dom";
const reviewsInit = [
{
name: "Peter Lahm",
current: null
},
{
name: "Simon Arnold",
current: null
},
{
name: "Claire Pullen",
current: null
}
];
class App extends Component {
constructor() {
super();
this.state = {
name: "React",
reviews: reviewsInit
};
}
change = () => {
this.setState({
reviews[2].current: true
});
};
render() {
return (
<div>
{console.log(this.state.reviews[2].current)}
<button onClick={this.change}>click me</button>
</div>
);
}
}
render(<App />, document.getElementById("root"));
演示:https://stackblitz.com/edit/react-tbryf5
正如你可能知道的,我是新反应的!感谢您在这里提供的任何帮助
对于某些上下文,当状态对象的引用发生更改时,React
会检测到状态更改。它不跟踪数组或对象中发生的深层次更改。
解决方案
我们需要制作另一个具有相同数据的变量(主要是析构函数(。更改所需的值。并再次将其分配给州。
对于对象
this.setState({...oldState, keyToChange: 'newValue'});
对于阵列
const temp = [...oldState];
temp[index] = 'newValue';
this.setState(temp);
希望能有所帮助。
数组状态通常先复制,然后更新其值
change = () => {
const result = [...this.state.reviews];
result[2].current = true;
this.setState({reviews: result});
};
import React, { Component } from "react";
import { render } from "react-dom";
const reviewsInit = [
{
name: "Peter Lahm",
current: null,
},
{
name: "Simon Arnold",
current: null,
},
{
name: "Claire Pullen",
current: null,
},
];
class App extends Component {
constructor() {
super();
this.state = {
name: "React",
reviews: reviewsInit,
};
}
change = () => {
const prevState = [...this.state.reviews];
prevState[2].current = true;
this.setState({
reviews: prevState,
});
};
render() {
return (
<div>
{console.log(this.state.reviews[2].current)}
<button onClick={this.change}>click me</button>
</div>
);
}
}
render(<App />, document.getElementById("root"));