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

无法使用setState或forceUpdate重新呈现/刷新组件

朱建弼
2023-03-14

我正在使用React构建一个web应用程序,它将在用户每次单击按钮时显示不同的报价。我一直在寻找一种方法,让组件quotegenerator在单击按钮时重新呈现/刷新,我尝试了本文中介绍的所有可能性,但都没有成功。

class QuoteGenerator extends React.Component {
  constructor(props) {
        super(props);
        this.state = {num: Math.floor(Math.random() * quotes.length)};
    }

  render() {
    return(
      <div class="quoteBox">
        <div class="quote">
          "{quotes[this.state.num][0]}"<br/>
        </div>
        <button class="button btn" onClick={this.forceUpdate}>New Quote</button>
      </div>
    );
  }
}

即使创建运行this.forceupdate()this.setstate()的单独函数,并使用onclick调用该函数,也不起作用;我想我一定是执行错了什么。有没有人知道我的错误在哪里?

共有1个答案

令狐良骏
2023-03-14

看来你只选了一次报价。构造函数将在组件实例化时运行,但不会在每次单击时运行。

添加方法:

nextQuote() {
  this.setState({
    num: Math.floor(Math.random() * quotes.length),
  });
}

并从您的onclick中调用它(小心使用this)。

通常情况下,您应该尽量避免使用forceupdate(),只从render()中的this.propsthis.state读取。

 类似资料:
  • 我猜这可能与从父级打开有关,但我有其他组件,它们内部的状态发生变化,所以我有点困惑,为什么这个组件不尊重它的新状态。 谢谢

  • 我是新来的反应。作为一个学习练习,我正在构建一个国际象棋应用程序 我想根据父级中的状态更改子级的DOM。当前,在父级组件的状态变化时,子级组件没有变化。 PS:请忽略任何语法错误。这段代码是实际代码的精简。如果你想看完整的代码,请看这里

  • 在基于多个用户上下文呈现整个页面并发出多个请求之后,我希望用户能够切换上下文并再次重新呈现所有内容(重新发送所有请求,等等)。如果我只是将用户重定向到其他地方,事情就会正常工作: 如果使用,则上等待响应的某些请求将被取消,因此我不能使用它。此外,黑客也不起作用(什么也不会发生)。 有没有另一种方法可以重新呈现页面,而不用再次手动发出所有请求?

  • 例如,当呈现表中的长元素列表时,对的任何调用,无论是否更改表用于枚举的数据,都会导致重新呈现每个子对象。 但是如果是这样的话,当那个链接里的元素数增加到说4000的时候,为什么点击的时候会有这么多的减速呢?当使用稍微复杂一些的自定义React组件时,只使用200个项目时,会注意到显着的减速。

  • 以下是我的观点: 任何我的用户。java: 因此,当我在Name字段中键入一些内容并单击提交时,我希望看到带有id“问候语”的outputText,因为user.name渲染()应该返回true。 但是,我需要在提交名称后刷新页面才能看到它。为什么可能是原因?为什么它需要页面刷新?没有页面刷新我怎么能做到呢?