我正在重新审视一个我曾问过的老问题,并以不同的方式处理它。目前,我想更新分数数组。当前发生的情况是当onClick函数运行时,它会删除整个数组。我如何只更新我要指定的数组索引?
class App extends React.Component {
constructor(props) {
super(props);
this.scoreFive = this.scoreFive.bind(this);
this.state = {
score: [10, 20]
}
}
scoreFive(key) {
this.setState((prevState) => {
return {
score: [
prevState.score[key] + 5
]
}
})
console.log(key)
}
render() {
return (
<div>
<h1>Dominoes</h1>
<Player key={1} name="micah" score={this.state.score[0]} scoreFive={() => this.scoreFive(0)} />
<Player key={2} name="kyndra" score={this.state.score[1]} scoreFive={() => this.scoreFive(1)} />
</div>
);
}
}
答案 0 :(得分:0)
const newArray = this.state.score.map(element => element + 5);
然后执行:
this.setState({score: newArray});
map函数根据您的条件返回一个新数组。
有什么问题让我知道:)
答案 1 :(得分:0)
您必须从以前的状态获取数组,对其进行克隆,修改特定索引,然后使用该状态更新状态:
score: prevState.score.map((value, index) => index === key ? value + 5 : value)
如果您经常这样做,则重复性很强,您也可以将其抽象为助手:
const lens = (key, cb) => obj => ({ ...obj, [key]: cb(obj[key]) });
const index = (index, cb) => array => array.map((v, i) => i === index ? cb(v) : v);
可用作:
this.setState(lens("score", index(key, it => it + 5)));
答案 2 :(得分:-1)
尝试:
scoreFive(index) {
this.setState((prevState) => {
const score = prevState.score; // reference the array
score[index] + 5; // modify the specific index
return {
score: score
};
})
console.log(key)
}
答案 3 :(得分:-1)
更新得分并设置状态。.
scoreFive(key) {
let {score} = this.state;
score[key] += 5;
this.setState({score});
}
已编辑----------------------
因此,经过研究和一些负面的评分,我发现我做错了,并且按照the-power-of-not-mutating-data中所述改变状态。
这是更新的实现
scoreFive(key) {
this.setState({score: this.state.score.map((data, index) => index === key ? data + 5 : data) });
}
感谢您的帮助:)