亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

優雅地使用loading(推薦)

2019-11-19 11:44:34
字體:
來源:轉載
供稿:網友

前言 

不知道從什么時候開始有了寫博客的想法,奈何自己的知識儲備還很薄弱,遲遲無法下筆。這是我的第一篇博客,算是記錄一下自己學習前端以來的一些知識吧。如有錯漏,懇請指出,您的批評和指正是我前進路上的一大動力!

在平時的開發過程中,我們需要異步等待數據,常常會利用loading圖來加強用戶的體驗,讓用戶知道我們有在加載,那么如何在開發過程中更為優雅地使用loading呢?開發小程序的時候我們只需要一句wx.showLoading()就完事兒了,而在web開發中也有相應的UI框架來幫我們完成這件事情。那究竟是怎么實現的呢,讓我們來一起看一下。

先實現一個簡單的loading

<div class="container"> <div class="loading"></div></div>.container { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);}.loading { width: 100px; height: 100px; border-radius: 100%; border: 5px #ffffff solid; border-right-color: #87CEEB; animation: loading 1s linear infinite;}@keyframes loading { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); }}

這樣我們就實現了一個比較簡單的轉圈圈loading圖,下面我將分別敘述在vue和react中如何優雅地使用這個loading。

Vue部分

首先先用vue init webpack生成一個vue腳手架,插件的目錄如下圖所示

loading.vue里寫進了我們上面實現的簡單loading的代碼,加上一點點邏輯

<script> export default { name: "loading", data() {  return {  show: false  } } }</script>

index.js

//先引入loading組件import LoadingComponent from './loading'const Loading = {}Loading.install = function (Vue) {// 生成一個Vue的子類 同時這個子類也就是組件const ToastConstructor = Vue.extend(LoadingComponent)// 生成一個該子類的實例const instance = new ToastConstructor()// 將這個實例掛載在我創建的div上// 并將此div加入全局掛載點內部instance.$mount(document.createElement('div'))document.body.appendChild(instance.$el)//注入vue的原型鏈Vue.prototype.$loading = { show() {  instance.show = true }, close(){   instance.show = false  } }}export default Loading

這里我們生成個一個Vue的子類,然后將它的實例掛載到全局。將一些方法注入到Vue的原型鏈中,這樣就可以在任何組件中通過類似于this.$loading.show()的方法來控制loading圖的顯示和隱藏。最后我們導出Loading對象。然后在main.js中引入Loading插件,并調用Vue.use()方法來注冊插件

最后,讓我們來測試一下吧。測試代碼如下,用setTimeout來模擬異步請求。

<script> export default { name: 'HelloWorld', data() {  return {  msg: ''  } }, mounted() {  this.$loading.show()  setTimeout(()=>{  this.$loading.close()  this.msg = '加載完遼!'  },3000) } }</script>

奶思!測試成功!

React部分

在此之前,我先介紹一下react中的高階組件(HOC)

高階組件

在React中,多個不同的組件中如果需要用到相同的功能,這個解決方法,通常有Mixin和高階組件。但是由于Mixin過多會使使得組件難以維護,在React ES6中Mixin不再被支持。高階組件是一個接替Mixin實現抽象組件公共功能的好方法。高階組件其實是一個函數,接收一個組件作為參數,返回一個包裝組件作為返回值,類似于高階函數。

具體實現

先用create-react-app 生成一個測試腳手架,高階組件目錄如下圖所示

 

index.css主要是loading的樣式,index.js的代碼如下

import React from 'react';import './index.css'function hoc(ComponentClass) { return class HOC extends ComponentClass {  render() {   if (!this.state.loading) {    console.log(this.state.loading)    return super.render()   }   else {    return (<div>     <div className="container">      <div className="loading"></div>     </div>    </div>)   }  } }}export default hoc

我們定義了一個hoc函數,接受一個組件作為參數。通過this.state來操作組件的state屬性,通過super.render()來渲染組件。最后導出hoc函數。然后在組件中引入,如下

import hoc from '../hoc/loading/index'class Home extends Component { constructor(props) {  super(props)  this.state = {   msg: '還沒加載好',   loading: true  } } render() {  return (   <div>    {this.state.msg}   </div>  ); } componentDidMount() {  let loading = this.state.loading  setTimeout(() => {   this.setState({    loading: !loading,    msg: '加載完遼!'   })  }, 3000) }}export default hoc(Home)

同樣是采用setTimeout來模擬異步請求,測試結果也是成功的。react部分并沒有用裝飾器來使用高階組件,還不夠優雅。。。(在create-react-app中把網上的處理方法都試了一遍,還是報錯。。)

最后 

至此,在Vue和React中如何優雅地使用loading就到此結束遼。這是一個超簡易版的demo,但還是希望能分享給大家。寫完才真正體會到了那句老話,紙上得來終覺淺,絕知此事要躬行。

以上所述是小編給大家介紹的loading使用解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久福利网址导航| 中文字幕视频一区二区在线有码| 91久久国产婷婷一区二区| 午夜精品一区二区三区在线视频| 51视频国产精品一区二区| 成人黄色在线免费| 国产精品丝袜高跟| 亚洲欧美日韩另类| 欧美午夜影院在线视频| 欧美日韩一区二区免费在线观看| 最近2019免费中文字幕视频三| 久久久久久久999精品视频| 国产成人在线一区| 国产精品视频26uuu| 色yeye香蕉凹凸一区二区av| 日韩av成人在线观看| 亚洲最大的免费| 黑人精品xxx一区| 一区二区三区www| 成人黄色在线播放| 色av吧综合网| 色狠狠av一区二区三区香蕉蜜桃| 国产成人精品在线视频| 亚洲天堂精品在线| 精品国产欧美一区二区五十路| 久久精视频免费在线久久完整在线看| 欧美激情图片区| 国产亚洲视频在线| 中文字幕亚洲综合| 1769国产精品| 久久97精品久久久久久久不卡| 久久久国产视频| 欧美黄色成人网| 九九九久久国产免费| 日韩精品久久久久| 性欧美视频videos6一9| 国产精品女人久久久久久| 日韩精品在线视频美女| 国产日韩欧美日韩大片| 性欧美亚洲xxxx乳在线观看| 久久久成人精品| 国产精品免费久久久| 日韩一区在线视频| 国产精品第8页| 色先锋久久影院av| 国产一区二区激情| 成人黄色av播放免费| 日韩二区三区在线| 亚洲bt天天射| 国产精品草莓在线免费观看| 国产日韩欧美在线视频观看| 亚洲国产成人爱av在线播放| 日本免费久久高清视频| 日韩中文字幕视频| 国产精品成人国产乱一区| 日韩免费在线视频| 国产精品一区专区欧美日韩| 午夜精品久久久久久久久久久久| 亚洲第一网站免费视频| 一区二区成人精品| 日韩欧美亚洲一二三区| 国产精品视频yy9099| 精品丝袜一区二区三区| 国产成人精品在线视频| 日韩av电影中文字幕| 久久天天躁狠狠躁夜夜躁| 久久久在线观看| 国产综合在线视频| 久久黄色av网站| 欧美亚洲另类制服自拍| 国色天香2019中文字幕在线观看| 欧美日韩中文在线观看| 久久久久久久久久亚洲| 日韩va亚洲va欧洲va国产| 亚洲精品www久久久| 欧美又大又粗又长| 欧美区在线播放| 亚洲自拍另类欧美丝袜| 在线观看日韩av| 日韩在线欧美在线国产在线| 色婷婷综合成人av| 欧美肥老妇视频| 久久国产精品久久国产精品| 亚洲国产成人精品电影| 一区二区三区久久精品| 欧美高清不卡在线| 久久影院模特热| 亚洲精品小视频在线观看| 97久久精品视频| 日韩女在线观看| 狠狠综合久久av一区二区小说| 国产欧美一区二区三区视频| 伊人久久大香线蕉av一区二区| 亚洲白虎美女被爆操| 国产激情综合五月久久| 日韩中文字幕在线视频播放| 日韩国产高清污视频在线观看| 国产精品第10页| 91天堂在线视频| 精品夜色国产国偷在线| 欧美资源在线观看| 成人午夜两性视频| 91久久夜色精品国产网站| 亚洲欧美成人一区二区在线电影| 久久久久国产精品免费| 永久555www成人免费| 91免费在线视频| www国产亚洲精品久久网站| 国产亚洲精品美女| 亚洲高清av在线| 久久天天躁狠狠躁夜夜躁2014| 久久久久久久久久亚洲| 亚洲国产精品电影在线观看| 日韩欧美在线观看视频| 91日本视频在线| 91最新国产视频| 国产精品高清在线| 亚洲高清在线观看| 国产精品女主播| 91精品视频在线| 国产性猛交xxxx免费看久久| 欧美激情极品视频| 日韩成人激情影院| 在线成人一区二区| 91网站在线免费观看| 国产精品96久久久久久| 色综合影院在线| 久久精品国产精品| 精品欧美一区二区三区| 海角国产乱辈乱精品视频| 日本伊人精品一区二区三区介绍| 亚洲综合日韩中文字幕v在线| 欧美精品九九久久| 欧美韩日一区二区| 久久精品国产欧美激情| 精品高清一区二区三区| 欧美国产日韩一区二区| 日av在线播放中文不卡| 九九热视频这里只有精品| 欧美老肥婆性猛交视频| 国产一区二区三区在线看| 日本亚洲精品在线观看| 国外视频精品毛片| 最新国产成人av网站网址麻豆| 亚洲偷熟乱区亚洲香蕉av| 欧美人与性动交a欧美精品| 欧美又大又硬又粗bbbbb| 日韩成人中文字幕在线观看| 91在线免费网站| 一个人www欧美| 中文字幕久热精品视频在线| 久久五月天色综合| 国产美女久久精品| 亚洲成人免费在线视频| 国产亚洲一区二区精品| 亚洲少妇激情视频| 亚洲黄一区二区| 欧美日韩高清在线观看| 国产精品久久久一区| 国产精品老女人视频| 欧美野外wwwxxx| 亚洲第一视频网| 日韩在线视频国产| 久久久久久久成人|