react suspense的认识和了解

react suspense见名知意

suspense

悬念; 悬而未决,含糊不定; 焦虑,挂念; 中止,暂停.
悬停

后续版本相关

React 16.x的两大新特性 Time Slicing, Suspense
React 16.6:支持代码拆分的 Suspense 组件(已经发布)
React 16.7:React Hooks(~ 2019 年 Q1)
React 16.8:并发模式(~ 2019 年 Q2)
React 16.9:支持数据提取的 Suspense 组件(~ 2019 年年中)

技术背景

react
由来 自从Dan老哥加入React team以后,自从Dan老哥加入React team以后,React 带来了很多变化其中Time Slicing和Suspense是Dan在 Beyond React 16 by Dan Abramov - JSConf Iceland 演讲的题目

  1. React中文链接关于16.x更新
  2. 视频链接
  3. 官网地址博客说明地址,附带视频

解决的问题或者说一些使用场景

Suspense主要解决的就是网络IO问题。网络IO问题其实就是我们
现在用Redux+saga等等一系列乱七八糟的库来解决的「副作用」
问题。

当然凡事都有两面性

  1. 超简化的React Suspense实现
  2. 如何评价React的新功能Time Slice 和Suspense?

code splitting

  1. 使用react lazy and react Suspense 组件,见下代码
  2. webpack code spliting
  3. Create React App中的代码分割实践
  4. 基于webpack Code Splitting实现react组件的按需加载

代码如下

import React, { lazy, Suspense } from 'react';
import { Router } from "@reach/router";

import TabContainer from './TabContainer';
import NavLink from './NavLink';
import Spinner from "./Spinner"

import Profile from './Profile';
const Albums = lazy(() => import("./Albums"));
const Voting = lazy(() => import('./Voting'));

import './App.css';

function App() {
  return (
    <div className="app">
      <h1 className="coldpedia-title">COLDPEDIA</h1>
      <nav>
        <NavLink to="/">Profile</NavLink>
        <NavLink to="albums">Albums</NavLink>
        <NavLink to="voting">Voting</NavLink>
      </nav>
      <TabContainer>
        <Suspense fallback={<Spinner />}>
          <Router>
            <Profile path="/" />
            <Albums path="albums" />
            <Voting path="voting" />
          </Router>
        </Suspense>
      </TabContainer>
    </div>
  );
}

export default App;

async data fetching(还在生产中)

const albumsResource = unstable_createResource((id) => {
  return fetchAPI(`/albums/${id}`); 
})
cache 到哪里?global???

react component render fn;
 const album = albumsResource.read(this.props.id); 
// 体现suspense的地方之一
 
// 类似于
<ErrorBoundary></ErrorBoundary>

React Error Boundary 组件异常处理方案实践

make app more "performant with a better user experience(使用一种用户友好的方式使你的app性能更好)

concurrent Rendering 异步渲染?强行带节奏~

并发模式!

async Rendering ? 不是更好吗?

开启所谓的异步模型
ReactDOM.createRoot(domEle.render())
Suspense组件多一个 maxDuration={700(ms)}

sync mode
concurrent mode

相关链接

  1. 如何评价React的新功能Time Slice 和Suspense?
  2. React:Suspense的实现与探讨
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值