首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在react中呈现更新状态?

如何在react中呈现更新状态?
EN

Stack Overflow用户
提问于 2021-11-08 14:07:31
回答 2查看 102关注 0票数 0

我正在处理类组件中的React,我声明了一些状态,然后从API中获取数据并将该状态更改为新值,但React并不是在呈现状态的新值。但是,如果我在console.log()中声明了它,就会在控制台上给出新的值。

我的代码

代码语言:javascript
复制
class Home extends Component {
  constructor(props) {
    super(props);
    this.state = {
      unread: 0,
    }
    this.getUnread()
  }
  getUnread = async () => {
    let data = await Chatapi.get(`count/${this.props.auth.user.id}/`).then(({ data }) => data);
    this.setState({ unread: data.count });
    console.log(this.state.unread)
  }
  render() {
    const { auth } = this.props;
    return (
      <div>
        {this.state.unread}
      </div>
    )
  }

这是在控制台上打印2,但在屏幕上呈现0。如何获得更新状态(2)以在屏幕上呈现。

如果我访问另一个页面,然后返回到这个页面,那么它将呈现状态(2)的新值。

EN

回答 2

Stack Overflow用户

发布于 2021-11-08 14:11:46

请在getUnread()函数中调用componentDidMount,如下所示

代码语言:javascript
复制
componentDidMount() {
  this.getUnread()
}
票数 0
EN

Stack Overflow用户

发布于 2021-11-10 06:04:03

这是因为在React类组件中,当调用setState时,不直接传递值来设置状态更安全(因此,重新呈现组件)。这是因为状态是按照命令设置的,但是当组件被重命名时,状态再次被设置为初始值,这就是呈现的内容。

您可以阅读反应文档中给出的这个问题及其解决方案。

传递一个设置值的函数。

所以,setState的代码应该是

代码语言:javascript
复制
 this.setState((state) => { unread: data.count });

因此,您的更新代码将是:

代码语言:javascript
复制
class Home extends Component {
  constructor(props) {
    super(props);
    this.state = {
      unread: 0,
    }
    this.getUnread()
  }
  getUnread = async () => {
    let data = await Chatapi.get(`count/${this.props.auth.user.id}/`).then(({ data }) => data);
    this.setState((state) => { unread: data.count });
    console.log(this.state.unread)
  }
  render() {
    const { auth } = this.props;
    return (
      <div>
        {this.state.unread}
      </div>
    )
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69884808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档