首先,我很抱歉这个基本问题,但我刚开始从官方文档中学习React。
Initial state of my app
当我点击“继续”按钮时,我想更新topicTitle,topicContent和level的状态。它应该通过调用函数NextTopic
并在其中递增let level
来实现。然后将this.state.level
设置为递增变量level
的值。之后,switch case应该检查this.state.level
的值,如果它等于1,则更新topicName和topicContent的状态。
This is what my actually happens when my code runs
import React, { Component } from 'react';
export default class Sidebar extends Component {
//default states
constructor() {
super();
this.state = {
level: 0,
topicTitle: 'Topic Name',
topicContent: 'Content!!'
}
}
render() {
const NextTopic = (e) => {
//increment level
let level;
level++;
//set state of level to incremented let level
this.setState({level: level});
//check level of state and update topic name- and content state
switch(this.state.level) {
case 1:
return this.setState({topicTitle: 'new Topic Name', topicContent: 'new Content!!'});
}
}
//Sidebar Component
return (
<div>
<h1>{this.state.topicTitle}</h1>
<p>{this.state.topicContent}</p>
<h2>Level: {this.state.level}</h2>
<button id='next' onClick={NextTopic}>Continue</button>
</div>
)
}
};
答案 0 :(得分:1)
在执行switch-case时,setState不一定会更改您所在州的level
属性。 React批处理各种setState调用,然后每约16.67ms调用一次。你可以做两件事 -
使用您在NextTopic方法中创建的关卡变量(另外,您如何递增未定义的变量?
让level = this.state.level ++级 this.setState({level:level})
开关(电平){ 案例1://你的代码 }
将回调函数内部的switch-case包装到setState中,一旦状态实际通过react更改,就会调用它 -
让level = this.state.level ++级 this.setState({level},()=&gt; { switch(this.state.level){ 案例1://你的代码 })
答案 1 :(得分:1)
您尚未在level
中将NextTopic
设置为0。您可以直接在level
中将setState
增加1:
this.setState((prevState, props) => ({
level: prevState.level + 1
}));