我创建了2个按钮,并希望通过单击每个按钮来增加它们的价值。
下面的代码不起作用。请帮忙 !我在html
标记中使用类buttons
渲染的所有这些代码。
class Buttons extends React.Component {
state = { score_1: 0, score_2: 0 };
updateScore_1() {
this.setState((prevState) => {
score_1: prevState.score_1 += 1
});
}
updateScore_2() {
this.setState((prevState) => {
score_2: prevState.score_2 += 1
});
}
render() {
return (
<div>
<button onClick={this.updateScore_1.bind(this)}>{this.state.score_1}</button>
<br />
<button onClick={this.updateScore_2.bind(this)}>{this.state.score_2}</button>
</div>
)
}
}
ReactDOM.render(
<Buttons />,
document.querySelector('.buttons')
);
答案 0 :(得分:4)
您在this.setState中错过了关键字return。只需在this.setState
中添加return:
updateScore_2() {
this.setState((prevState) => {
return { score_2: prevState.score_2 + 1 }
});
}
答案 1 :(得分:0)
您应该写score_1: prevState.score_1 + 1
而不是score_1: prevState.score_1 += 1
。在您的情况下,您正在改变状态,但是使用setState回调您需要返回更新后的状态
this.setState((prevState) => ({ // notice the `({` here
[key]: prevState[key] +1
}));
您也可以只使用一个处理程序,而不是两个
class Buttons extends React.Component {
state = { score_1: 0, score_2: 0 };
updateScore(key) {
this.setState((prevState) => ({
[key]: prevState[key] +1
}));
}
render() {
return (
<div>
<button onClick={this.updateScore.bind(this, 'score_1')}>{this.state.score_1}</button>
<br />
<button onClick={this.updateScore.bind(this, 'score_2')}>{this.state.score_2}</button>
</div>
)
}
}
ReactDOM.render(
<Buttons />,
document.querySelector('.buttons')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div class="buttons"/>
答案 2 :(得分:-1)
我猜您的问题是由于以下事实:在setState方法中,您没有返回应该传递给setState方法的新状态
updateScore_1() {
this.setState((prevState) => {
score_1: prevState.score_1 += 1
});
}
有两个括号可以解决您的问题,或者您只需将新状态对象的return放进去即可。请参阅下面的完整解决方案:
class Buttons extends React.Component {
constructor(props) {
super(props);
this.state = { score_1: 0, score_2: 0 };
this.updateScore_1 = this.updateScore_1.bind(this);
this.updateScore_2 = this.updateScore_2.bind(this);
}
updateScore_1() {
this.setState(prevState => ({
score_1: (prevState.score_1 += 1)
}));
}
updateScore_2() {
this.setState(prevState => ({
score_2: (prevState.score_2 += 1)
}));
}
render() {
return (
<div>
<button onClick={this.updateScore_1}>{this.state.score_1}</button>
<br />
<button onClick={this.updateScore_2}>{this.state.score_2}</button>
</div>
);
}
}
ReactDOM.render(
<Buttons />,
document.querySelector('.buttons')
);