【发布时间】:2018-03-09 15:11:03
【问题描述】:
我对 React 还是很陌生。我不明白为什么这个问题不起作用。
我有Numbers Component。
const Numbers = (props) => {
return(
<div className="card text-center">
<div>
{Numbers.list.map((num,i) =>
<span key={i} onClick={() => props.selectNumbers(num)}>
{num}
</span>
)}
</div>
</div>
);
}
Numbers.list = [1,2,3,4,5,6,7,8,9];
现在在父 Game 组件中..
class Game extends React.Component {
state = {
selectedNumbers : []
};
selectNumber = (clickedNumber) => {
if(this.state.selectedNumbers.indexOf(clickedNumber) >= 0) {return;}
this.setState(prevState => ({
selectedNumbers: prevState.selectedNumbers.concat(clickedNumber)
}));
};
render() {
const {selectedNumbers } = this.state;
return (
<div className="container">
<h3>
Play Nine
</h3>
<hr />
<div className="row">
<Answer selectedNums = {selectedNumbers} />
</div>
<br />
<Numbers selectNumbers={this.selectNumber} selectedNums = {selectedNumbers} />
</div>
);
}
}
现在,这东西很好用。但是当我这样做时......
this.setState(prevState => ({
selectedNumbers: prevState.selectedNumbers.push(clickedNumber)
}));
应用程序按预期工作。
As prevState.selectedNumbers is an array 不应该是push 而不是concat?
我做错了什么?
【问题讨论】:
-
push 是一个变异操作。所以在前一个状态上调用 push 会尝试改变它。这就像试图改变历史。你想要做的是通过重用旧状态而不改变它来创建一个新状态。这就是你可以用 concat 或 ES6 扩展运算符来做的事情。
标签: javascript arrays reactjs