反应等待异步还是重新渲染?

Posted

技术标签:

【中文标题】反应等待异步还是重新渲染?【英文标题】:React await async or rerender? 【发布时间】:2020-06-14 08:30:09 【问题描述】:

我有一个组件可以渲染从服务器接收到的数据。

我可以想到在这种情况下使用 2 个选项。

    componentDidMount() 中触发 fetch 函数并使用初始(空)数据进行渲染,并在设置状态时让 redux 重新渲染 await in componentDidMount() 并等待服务器响应,然后使用接收到的数据进行渲染

Option1 在没有数据的情况下加载会稍微快一些,然后用数据重新渲染(总共 2 个),Option2 只会渲染一次,但组件会显示得更慢。

哪种方法更好?

【问题讨论】:

【参考方案1】:

这取决于您的设计/需求。

一种正常的方法是为请求添加loading 动画(如material-ui loading)。并且仅在达到响应时呈现。

async componentDidMount() 
  await this.request();

async request() 
  const req: ReqParamsType = 
    ...
  
  this.setState(loading: true);
  await this.props.getReports(req);
  this.setState(loading: false);

render() 
  const  loading  = this.state;
  return (
    loading ? <LoadingAnimation /> : <MainContent />
    ... 

【讨论】:

以上是关于反应等待异步还是重新渲染?的主要内容,如果未能解决你的问题,请参考以下文章

不断的重新渲染是不是会使我的反应 dapp 变慢?还是web3有问题?

浏览器是根据更改重新渲染整个页面还是仅重新渲染特定元素?

反应我必须重新渲染父母才能重新渲染孩子吗?

React:setState 不会导致重新渲染?

反应输入文本失去对重新渲染的关注

滚动列表时反应本机 VirtualizedList 重新渲染