详解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 相关文章推荐
js 函数的副作用分析
Aug 23 Javascript
jQuery点击弹出下拉菜单的小例子
Aug 01 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
Mar 27 Javascript
使用vue.js开发时一些注意事项
Apr 27 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
Aug 05 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
Aug 17 Javascript
dul无法加载bootstrap实现unload table/user恢复
Sep 29 Javascript
AngularJs上传前预览图片的实例代码
Jan 20 Javascript
JS完成画圆圈的小球
Mar 07 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
Apr 20 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
Dec 13 Javascript
Electron整合React使用搭建开发环境的步骤详解
Jun 07 Javascript
vue3.0 加载json的方法(非ajax)
Oct 26 #Javascript
Vue+Element自定义纵向表格表头教程
Oct 26 #Javascript
vue3.0 的 Composition API 的使用示例
Oct 26 #Javascript
Vue中用JSON实现刷新界面不影响倒计时
Oct 26 #Javascript
jQuery实现简单评论区功能
Oct 26 #jQuery
vue.js封装switch开关组件的操作
Oct 26 #Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
Oct 26 #Javascript
You might like
全国FM电台频率大全 - 8 黑龙江省
2020/03/11 无线电
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
JS 显示当前日期与时间的代码
2010/03/24 Javascript
js判断变量是否未定义的代码
2020/03/28 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
数据结构中的各种排序方法小结(JS实现)
2016/07/23 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
jQuery 选择符详细介绍及整理
2016/12/02 Javascript
Vue Socket.io源码解读
2018/02/07 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
jQuery属性选择器用法实例分析
2019/06/28 jQuery
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
[48:39]Ti4主赛事胜者组第一天 EG vs NEWBEE 2
2014/07/19 DOTA
Python模块学习 filecmp 文件比较
2012/08/27 Python
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
Python中非常实用的一些功能和函数分享
2015/02/14 Python
用Python的pandas框架操作Excel文件中的数据教程
2015/03/31 Python
python+selenium开发环境搭建图文教程
2017/08/11 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
Python爬虫爬取百度搜索内容代码实例
2020/06/05 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
荷兰电脑专场:Paradigit
2018/05/05 全球购物
设计模式的基本要素是什么
2014/04/21 面试题
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
《雾凇》教学反思
2014/02/17 职场文书
出生公证委托书
2014/04/03 职场文书
小学五年级学生评语
2014/04/22 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
爱国主题班会教案
2015/08/14 职场文书
世界无敌的ICOM IC-R9500宽频接收机
2022/03/25 无线电
python APScheduler执行定时任务介绍
2022/04/19 Python
Elasticsearch 基本查询和组合查询
2022/04/19 Python
MySQL 语句执行顺序举例解析
2022/06/05 MySQL