当前位置: 首页 > 面试题库 >

为什么应该在componentDidMount中而不是在ReactJS中使用getInitialState进行异步请求?

吴安和
2023-03-14
问题内容

这是异步请求的数据作出反应的文档显示的页面应该在消耗componentDidMount事件,而getInitialState初始化状态对象为默认
状态。

有什么理由吗?也许不希望getInitialState这样做或有其他目的?是由于库的某些内部逻辑引起的吗?

主持人和回答者注意:这不是基于意见的问题:如果存在原因,那将是答案,但是,对我的问题的一个正确的正确答案也可能是:“不,没有任何特定的理由,做任何你觉得更好的事情”


问题答案:

getInitialState应该是道具的纯粹功能(尽管通常不使用它们)。换句话说,具有相同道具的getInitialState应该返回相同数据。

componentDidMount 被允许具有动态行为,并引起诸如dom操纵和ajax请求之类的副作用(这是其主要目的)。

解决此问题的常用方法是提早返回一个空div,加载消息<div>Loading</div>或加载指示符(例如spinkit)。

首先将显示微调器,然后最终使用数据更新状态,然后可以运行渲染的主要部分。

render: function(){
   // while loading
   if (!this.state.data){
     return <div className="spinner"></div>
   }

   // loaded, you can use this.state.data here
   return <div>...</div>
}


 类似资料:
  • 我刚刚发现,在react函数都是异步的,或者在调用它的函数完成后调用。 现在这两样东西很难消化 在博客中,函数是在函数内部调用的,但是触发函数的原因并不是被调用函数所知道的。 他们为什么要让异步,因为JS是单线程语言,而且这个setState不是WebAPI或服务器调用,所以只能在JS的线程上完成。他们这样做是为了使重新呈现不会停止所有事件侦听器和其他东西,还是有其他设计问题。

  • 问题内容: 标题说明了一切。我知道为什么它适用于需要DOM访问的任何内容,但是AJAX请求不一定或通常都需要这样做。 是什么赋予了? 问题答案: 用于副作用。添加事件侦听器,AJAX,更改DOM等。 很少有用;特别是如果您关心服务器端渲染(添加事件侦听器会导致错误和泄漏,以及许多其他可能出错的东西)。 讨论从类组件中删除组件是因为它的作用与构造器相同。它将保留在组件上。

  • 问题内容: 我正在阅读反应生命周期,并感到有些困惑。一些建议使用componentWillMount进行ajax调用: https://hashnode.com/post/why-is-it-a-bad-idea-to-call-setstate-immediately- after-componentdidmount-in-react- cim5vz8kn01flek53aqa22mby 在co

  • 问题内容: 从log.go(执行日志包): 只是一个函数包装器,为什么我应该用它代替or ? 有实际原因吗? 问题答案: 两件事不同: 通过包日志进行打印对于并发goroutine是安全的(而普通的则不是) 日志可以自动添加计时信息。 因此,这是两件完全不同的事情。log用于记录和格式化。(好吧,log使用相同的动词和标志,但这很方便)。

  • 我正在阅读react lifecycle,有点困惑。有些人建议使用componentWillMount进行ajax调用: https://hashnode.com/post/why-is-it-a-bad-idea-to-call-setstate-immediately-after-componentdidmount-in-react-cim5vz8kn01flek53aqa22mby 在com

  • 在我的场景中,我必须将数据从一个web应用程序发送到一个有效的数据存储区webapi。请求必须是同步的,如果出现问题,我非常希望抛出,因为这意味着应用程序的关键部分不可用。 这是一个现有问题的衍生,但不是重复;为什么使用HttpClient进行同步连接? 但在我的场景中,我确实想要那种行为。虽然有很多很好的用例,但有人能给出在我的场景中不使用的好理由吗?我使用的对象是否正确?更重要的是,为什么?