如何在React項目中實現loading

分類:IT技術 時間:2017-07-30

    如果在移動端的話,由於移動端操作相對比較單一,因此loading形式也比較簡單。通常做法是在請求發出時頁面正中位置彈出一個loading的 toast,請求結束隱藏 toast 。 這種做法大家接受度比較高,實現起來也比較簡單,就不贅述了。

    接下來談一下web端,由於pc強大的計算能力和相對大的屏幕,給用戶很大的操作空間,因此出現了很多種loading狀態。 比如頁面級別的loading(github頂部的loading bar),組件級別loading(比如一個按鈕,一個placeholder)。

 

我們先來分析下需求:

1.我們希望可以控制loading 的時機。

2.我們希望新增一個loading需求,不需要寫很多代碼

3. 我們不希望保存loading這樣的業務無關狀態(狀態最好都別保存)

 

使用起來大概是這樣子的:

(頁面級別,組件級別通用)

基礎版:

<Loading

    isloading={props.isloading}

>

<HelloWorld>123</HelloWorld>

</Loading>

標準版:

可以根據請求自動loading,需要結合redux-promise等實現。

具體來說就是在請求是dispatch一個action:

{
 type:"xxx",
 payload: "xxxx",
 meta: {
   requestId: 233
 }
}

這樣我們可以針對請求實現對應的loading (isloading 為true, requestId 不生效)

<Loading

    isloading={props.isloading}
    requestIds={[233,666,999]}

>

<HelloWorld>123</HelloWorld>

</Loading>

典藏版:

可以實現諸如 頂部progress bar,菊花轉動,自定義文字以及圖標,顯示百分比等功能(百分比基於requestsIds實現, 效果更逼真,個人覺得比微信的逼真)

<Loading
    mode="overlay" // overlay (default)/ progress
    showPercents={true} // make sense only in progress mode (default is false)
    spining={true}
    icon={<Icon type="loading" />}
    isloading={props.isloading}
    requestIds={[233,666,999]}

>

<HelloWorld>123</HelloWorld>

</Loading>

具體實現呢? 戳這裏 https://github.com/azl397985856/react-loading/tree/master


Tags: loading isloading 實現 HelloWorld 我們 一個

文章來源:


ads
ads

相關文章
ads

相關文章

ad