<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Suspense主要用來解決網路IO問題,它早在2018年的React 16.6.0版本中就已釋出。它的相關用法有些已經比較成熟,有的相對不太穩定,甚至經歷了重新命名、刪除:
如果你還沒有明白這是什麼意思那我簡單的表述成下面這句話:
呼叫render函數->發現有非同步請求->懸停,等待非同步請求結果->再渲染展示資料
看著是非常神奇的,用同步方法寫非同步,而且沒有yield/async/await,簡直能把人看傻眼了。這麼做的好處自然就是,我們的思維邏輯非常的簡單,清楚,沒有callback,沒有其他任何玩意,不能不說,看似優雅了非常多而且牛逼。
在前端開發中,經常會有這樣的需求,載入某個介面時,如果介面的資源比較大,前端對資料的處理也需要時間,載入比較慢,這時候我們需要用一個載入動畫或者提示,使得互動更加友好。
在React18之前,我們要實現上面這個效果,請求資料或者載入新的元件的時機一般在componentDidMount,在State中需要一個flag變數來記錄請求資料的狀態,後續手動更改這個狀態,非常的不方便。程式碼如下:
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} /> ); } }
1.React.lazy
React.lazy() 允許你定義一個動態載入的元件。這有助於縮減 bundle 的體積,並延遲載入在初次渲染時未用到的元件
const SomeComponent = React.lazy(() => import('./SomeComponent'));
渲染 lazy 元件依賴該元件渲染樹上層的 <React.Suspense> 元件。這是指定載入指示器(loading indicator)的方式。
2.React.Suspense
React.Suspense 可以指定載入指示器(loading indicator),以防其元件樹中的某些子元件尚未具備渲染條件:
// 該元件是動態載入的 const OtherComponent = React.lazy(() => import('./OtherComponent')); function MyComponent() { return ( // 顯示 <Spinner> 元件直至 OtherComponent 載入完成 <React.Suspense fallback={<Spinner />}> <div> <OtherComponent /> </div> </React.Suspense> ); }
因為沒有後端邏輯,前端表格元件主要用於在前端對 Excel、Grid 表格資料線上編輯和展示,而利用Suspense的技術特點,便可以輕鬆實現前後端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:https://demo.grapecity.com.cn/spreadjs/gc-sjs-samples/index.html
以上就是React Suspense前後端IO非同步操作處理的詳細內容,更多關於React Suspense前後端IO非同步的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45