React-Native中通用組件(Alert、Loading)

移動(dòng)端開(kāi)發(fā)過(guò)程中Alert和Loading框是必不可少的組件,各個(gè)平臺(tái)都有提供相應(yīng)的API,當(dāng)然UI樣式、響應(yīng)方式具有平臺(tái)的差異,React-Native(iOS、Android)項(xiàng)目中使用一套代碼,想要抹平平臺(tái)差異就需要自己?jiǎn)为?dú)實(shí)現(xiàn)一套。
最近的項(xiàng)目中有做相關(guān)方面的工作,特意從項(xiàng)目中抽離相關(guān)代碼邏輯,封裝成獨(dú)立組件,這里做一下簡(jiǎn)單的介紹。

react-native-overlayer

react-native項(xiàng)目中通用的浮層組件
源碼: https://github.com/yongqianvip/react-native-overlayer

功能

  • 通用RRCAlert組件
  • 通用RRCLoading組件

install

npm i react-native-overlayer --save

RRCAlert

  • 引用

      import { RRCAlert } from 'react-native-overlayer';
      ...
      RRCAlert.alert(title, content, buttons, callback, options);
    
  • options

    key default value desc
    contentTextStyle null 彈框content的文本樣式
  • 當(dāng) buttons.length > 2 時(shí),彈窗中的按鈕按縱向排列

RRCLoading

  • 引用

      import { RRCLoading } from 'react-native-overlayer';
      import LoadingImage from './src/loading.gif';
      ...
      const options = { loadingImage: LoadingImage, text: 'gogogo' };
      RRCLoading.setLoadingOptions(options);
    
      RRCLoading.show();
    
      RRCLoading.hide();
    
  • options

    key default value desc
    loadingImage null 圖片(gif)
    text 加載中... loading框中顯示的文本
  • 在android中使用gif圖需要添加額外配置,在android/app/build.gradle中添加如下代碼

      dependencies {
        // 如果你需要支持GIF動(dòng)圖
        compile 'com.facebook.fresco:animated-gif:1.3.0'
      }
    

Alert和Loading同時(shí)出現(xiàn)

場(chǎng)景 效果
多次RRCAlert.alert() 優(yōu)先展示最后一個(gè)(倒序展示)
多次RRCLoading.show() 僅展示最后一個(gè),RRCLoading.hide()時(shí)移除
當(dāng)loading未消失時(shí)觸發(fā)RRCAlert.alert() 優(yōu)先顯示loading,loading消失后顯示alert
當(dāng)alert未消失時(shí)觸發(fā)RRCLoading.show() 優(yōu)先顯示loading,loading消失后顯示alert

效果

alert&&loading.gif

核心實(shí)現(xiàn)

這個(gè)組件參照teasetoverlay來(lái)實(shí)現(xiàn)的,主要思路是在RN組件的最外層包了一層View(RRCTopView),本組件即是加載在RRCTopView中的視圖,使用絕對(duì)布局(position: 'absolute'), 其核心的代碼如下:

if (!AppRegistry.registerComponentOld) {
  AppRegistry.registerComponentOld = AppRegistry.registerComponent;
}

AppRegistry.registerComponent = function (appKey, componentProvider) {

  class RootElement extends Component {
    render() {
      let Component = componentProvider();
      return (
        <RRCTopView>
          <Component {...this.props} />
        </RRCTopView>
      );
    }
  }

  return AppRegistry.registerComponentOld(appKey, () => RootElement);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,351評(píng)論 25 708
  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱(chēng)項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明AI閱讀 16,236評(píng)論 3 119
  • 1.position:relative;相對(duì)布局的功能 2.box.eq(0) eq這個(gè)功能 3.varminBo...
    簡(jiǎn)單coder閱讀 443評(píng)論 0 0
  • 清·沈復(fù)《童趣》 余憶童稚時(shí),能張目對(duì)日,明察秋毫,見(jiàn)藐小之物必細(xì)察其紋理,故時(shí)有物外之趣。 夏蚊成雷,私擬作群鶴...
    小綠植物閱讀 312評(píng)論 0 0
  • 具體板塊詳解可以通過(guò)看書(shū)去學(xué)習(xí)總結(jié)或查找相關(guān)文章看大神神一樣的回復(fù)。 貼一些技術(shù)貼: 人物角色1 :(湯先生的總結(jié)...
    Zander閱讀 472評(píng)論 0 13

友情鏈接更多精彩內(nèi)容