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原型对象通俗&quot;唱法&quot;
Dec 27 Javascript
JS调用CS里的带参方法实例
Aug 01 Javascript
jQuery响应enter键的实现思路
Apr 18 Javascript
jquery模拟alert的弹窗插件
Jul 31 Javascript
把普通对象转换成json格式的对象的简单实例
Jul 04 Javascript
jQuery基于ajax操作json数据简单示例
Jan 05 Javascript
Vue组件选项props实例详解
Aug 18 Javascript
Angular使用Md5加密的解决方法
Sep 16 Javascript
Vuex 进阶之模块化组织详解
Jan 12 Javascript
JavaScript面向对象程序设计创建对象的方法分析
Aug 13 Javascript
微信小程序实现图片滚动效果示例
Dec 05 Javascript
关于JavaScript数组去重的一些理解汇总
Sep 10 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函数之日期时间函数date()使用详解
2013/09/09 PHP
php判断页面是否是微信打开的示例(微信打开网页)
2014/04/25 PHP
smarty中js的调用方法示例
2014/10/27 PHP
PHP安装threads多线程扩展基础教程
2015/11/17 PHP
PHP使用ActiveMQ实现消息队列的方法详解
2019/05/31 PHP
基于Jquery与WebMethod投票功能实现代码
2011/01/19 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
2014/10/17 Javascript
js实现div弹出层的方法
2014/11/20 Javascript
浅谈jQuery事件绑定原理
2015/01/02 Javascript
jQuery增加与删除table列的方法
2016/03/01 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)
2016/06/17 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
Chrome调试折腾记之JS断点调试技巧
2017/09/11 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
webpack打包优化的几个方法总结
2020/02/10 Javascript
[51:17]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
Python使用Phantomjs截屏网页的方法
2018/05/17 Python
Python Numpy计算各类距离的方法
2019/07/05 Python
Python如何向SQLServer存储二进制图片
2020/06/08 Python
使用keras实现非线性回归(两种加激活函数的方式)
2020/07/05 Python
深入了解Python 变量作用域
2020/07/24 Python
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
写给妈妈的道歉信
2014/01/11 职场文书
幼儿园大班毕业感言
2014/02/06 职场文书
联片教研活动总结
2014/07/01 职场文书
大学生实习证明范本
2014/09/19 职场文书
人大代表选举标语
2014/10/07 职场文书
篮球拉拉队口号
2015/12/25 职场文书
Promise静态四兄弟实现示例详解
2022/07/07 Javascript