当前位置: 首页 > 知识库问答 >
问题:

React类:setState什么都不做(也没有报告错误)[重复]

翟修明
2023-03-14

我有一个使用此构造函数的React类:

class AddList extends Component {
constructor(props){
  super(props);
  this.state = { hidden: true };
}

那么我有这个功能:

handleSubmit(e) {
e.preventDefault(); // this prevents the page from reloading -- do not     delete this line!

// Implement the rest of this function here!
alert('this.state.hidden: ' + this.state.hidden);
if (this.state.hidden == true){
  alert('setting hidden to false');
  this.setState({hidden: false});
  }
  else{
    alert('setting hidden to true');
    this.setState({hidden: true});
  }
alert('this.state.hidden: ' + this.state.hidden);
    . . . 

My problem is that neither this.setState({hidden: false);
nor                        this.setState({hidden: 'false'); 

改变状态!“警报”框确认通过代码的路径,只有“设置状态”似乎是NOP!

共有2个答案

梅庆
2023-03-14

如果您想在更新后读取状态值,您可以使用setState方法的第二个参数,这是一个回调函数。此回调函数在状态更新和组件重新呈现后执行。this.set状态({隐藏:!this.state.hidden},函数(){console.log("更新状态:"this.state.hidden ); });

路雅懿
2023-03-14

setState是异步的,因此您以后将无法看到更新。这就是为什么您在上一次调用警报时看不到最新值的原因。

有关更多信息,请查看ReactJs的文档:https://facebook.github.io/react/docs/state-and-lifecycle.html#using-正确陈述

我写了一个基于你的示例代码:

class AddList extends React.Component {
  constructor(props) {
    super(props)
    
    this.state = { hidden: true }
    
    this.handleSubmit = this.handleSubmit.bind(this)
  }
  
  handleSubmit(event) {
    event.preventDefault()
    
    this.setState({ hidden: !this.state.hidden })
  }
  
  render() {
    return (
      <div>
        <div>State value: {this.state.hidden ? 'hidden' : 'visible'}</div>
        <button onClick={this.handleSubmit}>Click-me</button>
      </div>
    )
  }
 }
 
 ReactDOM.render(<AddList />, document.getElementById('root'))
<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 id="root"></div>

 类似资料:
  • 我正在尝试使用JUnit错误收集器报告错误。虽然我的断言失败了,但JUnit中并没有报告错误。但我在控制台中收到了“错误”信息。

  • 使用指南 - 疑难问题 - 数据缺失或无数据问题 - 为什么所有报告都看不到数据 1、请确认您所选的时间范围 a) 统计数据可能尚未生成。代码添加后20-30分钟百度统计才能提供数据。 b) 您选择的时间段内是否有流量数据 2、请确认您的站点是否选择正确 在您的报告页右上角能够看到当前全中的站点。站点和网页中安装的统计代码是一一对应关系。请检查您所选的站点,是否安装了统计代码的站点。 3、请查看代

  • 在Java中,什么与Python的pass等效?我意识到我可以使用continue语句或不完成语句体来实现这种效果,但我喜欢使用pass语句。

  • 我的配置文件是类路径的路径。至少我认为是这样。我放置了log4j。资源文件夹中的属性文件,而log4j对此不做任何处理。即使我删除了它,也不会发生错误。 任何人都可以看到,我在使用maven LoggerTest的内容: 程序输出: log4j的内容。属性: 在波姆。xml并不是什么不同寻常的东西,只是一个依赖组织。阿帕奇。登录中。log4j log4j内核2.17.2,编译器源目标是16,没有插

  • 使用指南 - 数据报告 - 概述 - 为什么有些报告没有权限 在百度统计中,无权限报告所属的站点应是“权限站点”,权限站点在右上角站点选择下拉框中有“权限站点”的字样标注,如图所示: 权限站点是其他账户将其自有站点授权给您查看数据的站点,在授权时定义了您的查看和设置权限。如果此报告无权限,说明授权发起者未授权给您。 您可以在“管理->网站列表”的“权限网站”标签下,查看该站点的权限来源账户,如需开

  • 我正在编写一个游戏,当一个玩家结束回合时,我想通知对手轮到他玩了。 所以我在“播放器”类中存储了WebSocket会话,所以我只需要得到一个播放器的实例来访问他的WebSocket会话。 问题是,当我使用存储在“player”实例中的websocketsession的“send”方法时,什么都没有发生。 下面是我将WebSocketSession存储在播放器对象中的代码,它实际上可以从前端正确接收