详解vue3.0 的 Composition API 的一种使用方法

作者:金色海洋(jyk) 时间:2024-04-28 09:23:48 

网上讨论的文章已经很多了,这里举一个简单的例子来讨论一下 Composition API 的用法,具体问题才好具体讨论嘛。

假如我们要做一个论坛的讨论列表和分页,以前是把需要的数据都放在data里面,事件都放在methods 里面,代码少的话还好分辨,如果代码多了,看着就头疼了。
现在vue3.0可以按照业务关系分成多个管理类来管理这些代码。

比如帖子列表+发帖功能,我们先做一个模板:
(简单表示一下,不做美化处理了)


<template>
<div>
 论坛列表
 <div v-for="(item, index) in articleList" :key="'articleList' + index">
 {{index}}:{{item.title}}
 {{item.viewCount}}
 </div>
 <div><!--分页-->
 <a-pagination v-model:current="acticleCurrent" :total="50" show-less-items />
 </div>
</div>
<div style="width:400px">
 发个帖子
 标题:<a-input v-model:value="articleForm.title"/>
 内容:<a-input v-model:value="articleForm.content"/>
 <a-button type="dashed" @click="sendArticle" >发表帖子</a-button>
</div>
</template>

上面的模板部分没有啥区别,变化部分在js代码。
我们可以先写一个帖子列表的管理类,包含帖子列表的数据,和依据页号加载数据的方法。

代码如下:


// 帖子列表的管理类
const manageArticleList = () => {
const articleList = ref([
{
 title: '这是帖子',
 viewCount: 100,
 sendTime: '2020-10-20'
}
])

// 依据页号加载帖子列表
const loagActicleListByPage = (pageIndex) => {
// alert(pageIndex)
articleList.value = [
 {
 title: '这是新加载的帖子帖子',
 viewCount: 100 + parseInt(pageIndex),
 sendTime: '2020-10-20'
 }
]
}

return {
articleList,
loagActicleListByPage
}
}

再写一个分页的管理类(使用antdv的a-pagination),代码如下


// 分页管理类
const manageActiclePage = () => {
const acticleCurrent = ref(0)

return {
acticleCurrent
}
}

最后我们可以在setup里面把这两个管理类给结合起来,一起返回给view。


export default {
setup () {
// 引入查询管理
const { articleList, loagActicleListByPage } = manageArticleList()
// 引入分页管理
const { acticleCurrent } = manageActiclePage()

// 监听页号变化,加载数据
watch(acticleCurrent, (newValue, oldValue) => {
 loagActicleListByPage(newValue)
})
// 返回给view
return {
 articleList,
 acticleCurrent,
}
}
}

在setup里面,监听 acticleCurrent 页号变化,调用 manageArticleList 的 loagActicleListByPage 事件,加载数据。
当然也可以有其他的组合方式,这里只是举个简单的例子。

这样代码可以根据业务逻辑分散开,便于扩展和维护,比如我们要加一个查询功能,那么可以在 manageArticleList 里面加个 loagActicleListByQuery 的事件。

最后的效果就是,代码依据业务逻辑,完全分散成多个管理类,setup只需要负责加载和整合即可,setup里面也不会有很多代码。

管理类应该可以写在单独的js文件里面,比如我们把表单的js代码写在单独的js文件里面:(bbs-manageArticleForm.js)


import { ref } from 'vue'

// 帖子列表的管理类
export function manageArticleForm () {
const modelForm = ref(
{
 title: '这是帖子标题',
 content: '帖子内容',
 sendTime: '2020-10-20'
}
)
// 依据页号加载帖子列表
const sendArticle = () => {
// 调用axios 向后端提交
alert('假装发表成功了。。。')
}
return {
articleForm: modelForm,
sendArticle
}
}

然后在views里面用import引入


import { manageArticleForm } from './bbs-manageArticleForm.js'

在setup里面设置如下:


setup() {
......
// 表单
const { articleForm, sendArticle } = manageArticleForm()

// 返回给view
return {
 ......
 articleForm,
 sendArticle,
 ......
}
}

写在单独的js文件里面,意味着可以复用。不仅这里可以用,其他的地方也可以直接拿过来用。好吧,这个表单基本没啥可以好复用的,这里只是举个例子。

来源:https://www.cnblogs.com/jyk/p/13877289.html

标签:vue,Composition,API
0
投稿

猜你喜欢

  • Oracle捕获问题SQL解决CPU过渡消耗

    2010-07-21 13:14:00
  • python opencv将多个图放在一个窗口的实例详解

    2023-04-30 10:16:53
  • mysql数据库查询优化 mysql效率第1/3页

    2024-01-28 05:16:17
  • 使用python接入微信聊天机器人

    2022-04-08 10:07:23
  • 解析MYSQL显示表信息的方法

    2024-01-15 12:17:49
  • 用python打印1~20的整数实例讲解

    2023-12-18 21:45:06
  • python中enumerate的用法实例解析

    2023-03-10 19:11:18
  • Python结巴中文分词工具使用过程中遇到的问题及解决方法

    2023-04-28 18:23:28
  • 浅谈Vue3 defineComponent有什么作用

    2024-05-05 09:25:03
  • PHP中判断变量为空的几种方法分享

    2024-06-05 09:35:25
  • Python Scrapy 框架简单介绍

    2021-09-18 14:51:48
  • Go语言导出内容到Excel的方法

    2024-02-11 17:18:56
  • PHP实现图片批量打包下载功能

    2024-05-11 09:47:21
  • Python实现的数据结构与算法之快速排序详解

    2022-03-03 16:49:17
  • IE7兼容模式与兼容视图

    2010-06-28 18:48:00
  • ASP从数据库中获取下载文件

    2007-10-06 21:17:00
  • ES6正则表达式扩展笔记

    2024-04-18 10:00:12
  • python opencv实现影像拼接

    2023-10-24 10:54:04
  • python文本进度条实例

    2023-05-15 17:18:16
  • Python基础学习之函数和代码复用详解

    2022-11-17 13:05:38
  • asp之家 网络编程 m.aspxhome.com