vue3.0 的 Composition API 的使用示例


Posted in Javascript onOctober 26, 2020

网上讨论的文章已经很多了,这里举一个简单的例子来讨论一下 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文件里面,意味着可以复用。不仅这里可以用,其他的地方也可以直接拿过来用。好吧,这个表单基本没啥可以好复用的,这里只是举个例子。

以上就是vue3.0 的 Composition API 的使用示例的详细内容,更多关于vue3.0 的 Composition API 的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
Oct 25 Javascript
突发奇想的一个jquery插件
Nov 19 Javascript
jquery选择器的选择使用及性能介绍
Jan 16 Javascript
Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
Jul 17 Javascript
使用Sticker.js实现贴纸效果
Jan 28 Javascript
jquery实现的用户注册表单提示操作效果代码分享
Aug 28 Javascript
vue中如何创建多个ueditor实例教程
Nov 14 Javascript
JavaScript寄生组合式继承实例详解
Jan 06 Javascript
JS实现textarea通过换行或者回车把多行数字分割成数组并且去掉数组中空的值
Oct 29 Javascript
three.js搭建室内场景教程
Dec 30 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
Mar 12 Javascript
jQuery实现推拉门效果
Oct 19 jQuery
Vue中用JSON实现刷新界面不影响倒计时
Oct 26 #Javascript
jQuery实现简单评论区功能
Oct 26 #jQuery
vue.js封装switch开关组件的操作
Oct 26 #Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
Oct 26 #Javascript
vue render函数动态加载img的src路径操作
Oct 26 #Javascript
vue实现简单的登录弹出框
Oct 26 #Javascript
让你30分钟快速掌握vue3教程
Oct 26 #Javascript
You might like
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
用PHP读取超大文件的实例代码
2012/04/01 PHP
php7性能提升的原因详解
2019/10/13 PHP
jquery multiSelect 多选下拉框
2010/07/09 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
Knockout visible绑定使用方法
2013/11/15 Javascript
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
2015/11/24 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
2016/07/22 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
详解Axios 如何取消已发送的请求
2018/10/20 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
Vue 使用beforeEach实现登录状态检查功能
2019/10/31 Javascript
vue页面跳转实现页面缓存操作
2020/07/22 Javascript
js实现碰撞检测
2021/01/29 Javascript
[01:38]完美世界DOTA2联赛(PWL)宣传片:第一站
2020/10/26 DOTA
python使用7z解压apk包的方法
2015/04/18 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
Python操作Excel插入删除行的方法
2018/12/10 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
python判断链表是否有环的实例代码
2020/01/31 Python
澳大利亚网上玩具商店:Mr Toys Toyworld
2018/03/25 全球购物
女装和独特珠宝:Sundance Catalog
2018/09/19 全球购物
彪马日本官网:PUMA日本
2019/01/31 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
空气环保标语
2014/06/12 职场文书
语文教育专业求职信
2014/06/28 职场文书
干部竞争上岗演讲稿
2014/09/11 职场文书
英语辞职信怎么写
2015/02/28 职场文书
2015年远程教育工作总结
2015/05/20 职场文书
职工食堂管理制度
2015/08/06 职场文书
Go语言实现Snowflake雪花算法
2021/06/08 Golang