最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React?Suspense前后端IO異步操作處理

 更新時(shí)間:2022年06月16日 17:11:45   作者:葡萄城技術(shù)團(tuán)隊(duì)  
這篇文章主要為大家介紹了React?Suspense前后端IO異步操作處理示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

簡(jiǎn)單介紹Suspense

Suspense主要用來(lái)解決網(wǎng)絡(luò)IO問(wèn)題,它早在2018年的React 16.6.0版本中就已發(fā)布。它的相關(guān)用法有些已經(jīng)比較成熟,有的相對(duì)不太穩(wěn)定,甚至經(jīng)歷了重命名、刪除:

  • 在render函數(shù)中,我們可以寫(xiě)入一個(gè)異步請(qǐng)求,請(qǐng)求數(shù)據(jù)
  • react會(huì)從我們緩存中讀取這個(gè)緩存
  • 如果有緩存了,直接進(jìn)行正常的render
  • 如果沒(méi)有緩存,那么會(huì)拋出一個(gè)異常,這個(gè)異常是一個(gè)promise
  • 當(dāng)這個(gè)promise完成后(請(qǐng)求數(shù)據(jù)完成),react會(huì)繼續(xù)回到原來(lái)的render中(實(shí)際上是重新執(zhí)行一遍render),把數(shù)據(jù)render出來(lái)
  • 完全同步寫(xiě)法,沒(méi)有任何異步callback之類的東西

如果你還沒(méi)有明白這是什么意思那我簡(jiǎn)單的表述成下面這句話:

調(diào)用render函數(shù)->發(fā)現(xiàn)有異步請(qǐng)求->懸停,等待異步請(qǐng)求結(jié)果->再渲染展示數(shù)據(jù)

看著是非常神奇的,用同步方法寫(xiě)異步,而且沒(méi)有yield/async/await,簡(jiǎn)直能把人看傻眼了。這么做的好處自然就是,我們的思維邏輯非常的簡(jiǎn)單,清楚,沒(méi)有callback,沒(méi)有其他任何玩意,不能不說(shuō),看似優(yōu)雅了非常多而且牛逼。

Suspense主要用法和場(chǎng)景

在前端開(kāi)發(fā)中,經(jīng)常會(huì)有這樣的需求,加載某個(gè)界面時(shí),如果界面的資源比較大,前端對(duì)數(shù)據(jù)的處理也需要時(shí)間,加載比較慢,這時(shí)候我們需要用一個(gè)加載動(dòng)畫(huà)或者提示,使得交互更加友好。

一. React18之前的做法

在React18之前,我們要實(shí)現(xiàn)上面這個(gè)效果,請(qǐng)求數(shù)據(jù)或者加載新的組件的時(shí)機(jī)一般在componentDidMount,在State中需要一個(gè)flag變量來(lái)記錄請(qǐng)求數(shù)據(jù)的狀態(tài),后續(xù)手動(dòng)更改這個(gè)狀態(tài),非常的不方便。代碼如下:

class App extends Component {
  state = {
isLoading: false,
  }
  componentDidMount() {
    this.setState({
      data: null,
isLoading: true,
    });
    axios.get('/api/getData').then((data) => {
      this.setState({
        data,
isLoading: false,
      });
    });
  }
  render() {
    return this.state.loading ? '正在加載中...' : (
      <Page data={data} />
    );
  }
}

二. React18之后

1.React.lazy

React.lazy() 允許你定義一個(gè)動(dòng)態(tài)加載的組件。這有助于縮減 bundle 的體積,并延遲加載在初次渲染時(shí)未用到的組件

const SomeComponent = React.lazy(() => import('./SomeComponent'));

渲染 lazy 組件依賴該組件渲染樹(shù)上層的 &lt;React.Suspense&gt; 組件。這是指定加載指示器(loading indicator)的方式。

2.React.Suspense

React.Suspense 可以指定加載指示器(loading indicator),以防其組件樹(shù)中的某些子組件尚未具備渲染條件:

// 該組件是動(dòng)態(tài)加載的
const OtherComponent = React.lazy(() => import('./OtherComponent'));
function MyComponent() {
  return (
    // 顯示 <Spinner> 組件直至 OtherComponent 加載完成
    <React.Suspense fallback={<Spinner />}>
      <div>
        <OtherComponent />
      </div>
    </React.Suspense> 
  );
}

Suspense配合前端表格組件處理前后端IO異步操作

因?yàn)闆](méi)有后端邏輯,前端表格組件主要用于在前端對(duì) Excel、Grid 表格數(shù)據(jù)在線編輯和展示,而利用Suspense的技術(shù)特點(diǎn),便可以輕松實(shí)現(xiàn)前后端IO異步操作:

const PureSpread = React.lazy(() => import('./components/pureSpread'))
const SpreadDesigner = React.lazy(() => import('./components/designer'))
const {Content,Header} = Layout
const App = () => (
  <Layout className="app">
     <IndexSider/>
     <Layout>
        <Content className="index-content">
          <HashRouter>
              <Switch>
                <Suspense fallback={<div>loading...</div>}>
                  <Route exact path="/" component={PureSpread}/>
                  <Route exact path="/designer" component={SpreadDesigner}/>   
                </Suspense>
              </Switch>
          </HashRouter>
        </Content>
        <IndexFooter/>
     </Layout>
  </Layout>
)

看一下效果:

本文Demo下載

了解更多在線demo:https://demo.grapecity.com.cn/spreadjs/gc-sjs-samples/index.html

以上就是React Suspense前后端IO異步操作處理的詳細(xì)內(nèi)容,更多關(guān)于React Suspense前后端IO異步的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:

相關(guān)文章

  • React Fragment 和空標(biāo)簽(<></>)用法及區(qū)別詳解

    React Fragment 和空標(biāo)簽(<></>)用法及區(qū)別詳解

    本文詳細(xì)介紹了React中的Fragment和空標(biāo)簽的使用,包括它們的區(qū)別、使用場(chǎng)景、性能考慮以及最佳實(shí)踐,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • 可定制react18 input otp 一次性密碼輸入組件

    可定制react18 input otp 一次性密碼輸入組件

    這篇文章主要為大家介紹了可定制react18 input otp 一次性密碼輸入組件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • React官方團(tuán)隊(duì)完善原生Hook閉包陷阱

    React官方團(tuán)隊(duì)完善原生Hook閉包陷阱

    這篇文章主要為大家介紹了React官方團(tuán)隊(duì)出手,補(bǔ)齊原生Hook短板閉包陷阱的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • React元素與組件的區(qū)別示例詳解

    React元素與組件的區(qū)別示例詳解

    這篇文章主要為大家介紹了React元素與組件的區(qū)別示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • React 項(xiàng)目中動(dòng)態(tài)設(shè)置環(huán)境變量

    React 項(xiàng)目中動(dòng)態(tài)設(shè)置環(huán)境變量

    本文主要介紹了React 項(xiàng)目中動(dòng)態(tài)設(shè)置環(huán)境變量,本文將介紹兩種常用的方法,使用 dotenv 庫(kù)和通過(guò)命令行參數(shù)傳遞環(huán)境變量,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • ReactNative環(huán)境搭建的教程

    ReactNative環(huán)境搭建的教程

    這篇文章主要介紹了ReactNative環(huán)境搭建的教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • react如何實(shí)現(xiàn)表格多條件搜索

    react如何實(shí)現(xiàn)表格多條件搜索

    這篇文章主要介紹了react如何實(shí)現(xiàn)表格多條件搜索問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 詳解react-router如何實(shí)現(xiàn)按需加載

    詳解react-router如何實(shí)現(xiàn)按需加載

    本篇文章主要介紹了react-router如何實(shí)現(xiàn)按需加載,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • 一文搞懂?React?18?中的?useTransition()?與?useDeferredValue()

    一文搞懂?React?18?中的?useTransition()?與?useDeferredValue()

    這篇文章主要介紹了一文搞懂?React?18?中的?useTransition()與useDeferredValue(),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • 淺談React 屬性和狀態(tài)的一些總結(jié)

    淺談React 屬性和狀態(tài)的一些總結(jié)

    下面小編就為大家?guī)?lái)一篇淺談React 屬性和狀態(tài)的一些總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11

最新評(píng)論

武平县| 邵东县| 隆林| 和林格尔县| 海宁市| 元谋县| 武清区| 宽城| 新绛县| 尚义县| 昌宁县| 凌云县| 西昌市| 措美县| 环江| 湘阴县| 阿巴嘎旗| 南靖县| 黄陵县| 普兰县| 雅江县| 郯城县| 阳朔县| 扶沟县| 凤阳县| 永德县| 平遥县| 府谷县| 巴彦淖尔市| 射洪县| 新干县| 正安县| 江西省| 巧家县| 鄂温| 白山市| 西畴县| 新乐市| 雅安市| 昌宁县| 玛纳斯县|