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 相关文章推荐
Add a Picture to a Microsoft Word Document
Jun 15 Javascript
常用的JS验证和函数汇总
Dec 23 Javascript
如何减少浏览器的reflow和repaint
Feb 26 Javascript
bootstrap datetimepicker2.3.11时间插件使用
Nov 19 Javascript
脚本div实现拖放功能(两种)
Feb 13 Javascript
Vue 2.0 服务端渲染入门介绍
Mar 29 Javascript
Angularjs修改密码的实例代码
May 26 Javascript
vue 添加vux的代码讲解
Nov 30 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
Mar 13 Javascript
详解性能更优越的小程序图片懒加载方式
Jul 18 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
May 23 Javascript
原生JS利用transform实现banner的无限滚动示例代码
Jun 15 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
php中的数组操作函数整理
2008/08/18 PHP
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
js点击button按钮跳转到另一个新页面
2014/10/10 Javascript
百度地图自定义控件分享
2015/03/04 Javascript
jQuery在线选座位插件seat-charts特效代码分享
2015/08/27 Javascript
jQuery焦点图切换特效代码分享
2015/09/15 Javascript
jQuery页面加载初始化的3种方法(推荐)
2016/06/02 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
js遍历json的key和value的实例
2017/01/22 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
mac上node.js环境的安装测试
2017/07/03 Javascript
jQuery中each循环的跳出和结束实例
2017/08/16 jQuery
详解webpack运行Babel教程
2018/06/13 Javascript
Vue实现商品详情页的评价列表功能
2019/09/04 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
vue中watch的用法汇总
2020/12/28 Vue.js
[49:40]2018DOTA2亚洲邀请赛小组赛 A组加赛 TNC vs Newbee
2018/04/03 DOTA
python使用cPickle模块序列化实例
2014/09/25 Python
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
Django验证码的生成与使用示例
2017/05/20 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
使用pip发布Python程序的方法步骤
2018/10/11 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
蒙蒂塞罗商店:Monticello Shop
2018/11/25 全球购物
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
销售总经理岗位职责
2014/03/15 职场文书
中学生检讨书范文
2014/11/03 职场文书
车队安全员岗位职责
2015/02/15 职场文书
怎样写辞职信
2015/02/27 职场文书
保险内勤岗位职责
2015/04/13 职场文书
小学生暑假安全公约
2015/07/14 职场文书
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python