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 相关文章推荐
input 高级限制级用法
Mar 26 Javascript
javascript中的float运算精度实例分析
Aug 21 Javascript
Javascript 八进制转义字符(8进制)
Apr 08 Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
May 08 Javascript
node.js中的dns.getServers方法使用说明
Dec 08 Javascript
jQuery创建DOM元素实例解析
Jan 19 Javascript
Jquery时间轴特效(三种不同类型)
Nov 02 Javascript
Javascript中prototype的使用详解
Jun 18 Javascript
原生js实现键盘控制div移动且解决停顿问题
Dec 05 Javascript
canvas压缩图片转换成base64格式输出文件流
Mar 09 Javascript
详解Vue2.0里过滤器容易踩到的坑
Jun 01 Javascript
关于AngularJS中ng-repeat不更新视图的解决方法
Sep 30 Javascript
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
通过文字传递创建的图形按钮
2006/10/09 PHP
Ajax PHP简单入门教程代码
2008/04/25 PHP
php中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
求PHP数组最大值,最小值的代码
2011/10/31 PHP
介绍一些PHP判断变量的函数
2012/04/24 PHP
PHP读取RSS(Feed)简单实例
2014/06/12 PHP
基于jquery用于查询操作的实现代码
2010/05/10 Javascript
jquery中:input和input的区别分析
2011/07/13 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
2014/05/08 Javascript
javascript 获取浏览器版本
2015/01/21 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
javascript中sort() 方法使用详解
2015/08/30 Javascript
JS实现登录页面记住密码和enter键登录方法推荐
2016/05/10 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
浅谈jQuery双事件多重加载的问题
2016/10/05 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
Vue+abp微信扫码登录的实现代码示例
2020/01/06 Javascript
用js实现放大镜效果
2020/10/28 Javascript
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python常用知识梳理(必看篇)
2017/03/23 Python
Python实现迭代时使用索引的方法示例
2018/06/05 Python
Python实现读写INI配置文件的方法示例
2018/06/09 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
python隐藏终端执行cmd命令的方法
2019/06/24 Python
浅析Python语言自带的数据结构有哪些
2019/08/27 Python
python画微信表情符的实例代码
2019/10/09 Python
Pyecharts绘制全球流向图的示例代码
2020/01/08 Python
Casetify官网:自制专属手机壳、iPad护壳和Apple Watch手表带
2018/05/09 全球购物
自行车租赁公司创业计划书
2014/01/28 职场文书
内衣营销方案
2014/03/15 职场文书
2014镇党委书记党建工作汇报材料
2014/11/02 职场文书
2015年入党决心书
2015/02/05 职场文书
同学聚会开幕词
2019/04/02 职场文书
OpenCV3.3+Python3.6实现图片高斯模糊
2021/05/18 Python
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
2021/08/23 HTML / CSS