体验函数式组件简单实现Loading 加载(造轮子篇)

一、前言

最近想着优化一下网站,在文章列表页加一个Loading操作,于是就想到了函数式组件,于是本章就来和大家一起简单探讨下实现思路。

二、Loading设计

这里我想实现的效果是:当我们刷新页面的时候,前端请求接口,同时页面Loading加载中,当请求成功后,Loading消失,就是这么简单。

三、实现步骤

下面我们一步步来实现这个组件,最终我们可以通过调用函数来展示我们的组件。

3.1 绘制Loading模板

  1. 创建/src/components/Loading/index.vue

    html 复制代码
    <template>
        <div class="loading">
            Loading加載中...
        </div>
    </template>

3.2. 写一写loading的样式

  1. 给Loading加一点css样式

    css 复制代码
    .loading {
        position: fixed;
        display: flex;
        justify-content: center;
        align-items: center;  
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background: rgba($color: #000000, $alpha: .6);
        color: #fff;
        font-size: 2em;
        user-select: none;
    }

3.3 组件的逻辑

  1. 这里边还需要有一个逻辑,组件的显示和隐藏,动态title。

    js 复制代码
    <script setup>
    import { ref } from 'vue'
    
    const props = defineProps({
        title: {
            type: String,
            default: () => 'Loading加载中...'
        }
    })
    
    const isLoading = ref(false)
    
    const show = () => {
        isLoading.value = true
    }
    
    const hide = () => {
        isLoading.value = false
    }
    
    
    defineExpose({
        show,
        hide
    })
    </script>

四、封装函数式组件

  1. 创建/src/components/Loading/index.js
js 复制代码
import { createVNode, render } from 'vue'
import LoadingComp from '@/components/Loading'

const Loading = (title) => {
    const vDom = createVNode(LoadingComp, { title })
    render(vDom, document.body) 
    
    vDom.component.exposed.show()  

    return vDom.component.exposed.hide
}  

export default Loading

五、组件使用

js 复制代码
<script setup>
import Loading from '@/components/Loading/index.js'  

const stop = Loading('Loading...')
  
// 模拟http请求
setTimeout(() => {
    stop()
}, 2000)
</script>

六、总结

好了,今天体验了一下createVNode和render,其实上边的Loading方法我们可以全局注册,这样就不需要去单独导入我们的js文件了,案例写的不好,只是给大家提供一个思路,多学无害。

相关推荐
码艺-Alimjan19 分钟前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_1 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒1 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技1 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
星光开发者2 小时前
基于决策树随机森林算法的小说推荐系统的设计与实现-计算机毕设【课程设计】78485
vue.js·算法·微信小程序·django·php·课程设计·express
yivifu2 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub
vx_Biye_Design2 小时前
springboot高校选课系统82776-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·课程设计·express
niyongsheng2 小时前
后端零改动,给若依换一套现代化前端
vue.js·开源·node.js
默_笙3 小时前
🛴 从散件到整机:DeepAgents 与 Agent 身上预留的那些"插槽"(前置介绍)
前端·javascript
zhangzeyuaaa3 小时前
深入理解 Ruby 运算符:本质、分类、坑点与重载实战
开发语言·前端·ruby