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 相关文章推荐
YUI的Tab切换实现代码
Apr 11 Javascript
jQuery EasyUI 中文API Layout(Tabs)
Apr 27 Javascript
js实现的常用的左侧导航效果
Oct 17 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
Jan 20 Javascript
如何用JavaScript实现动态修改CSS样式表
May 20 Javascript
基于jQuery实现表格内容的筛选功能
Aug 21 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
Dec 28 Javascript
详解vue渲染从后台获取的json数据
Jul 06 Javascript
利用Angular2 + Ionic3开发IOS应用实例教程
Jan 15 Javascript
Windows下Node爬虫神器Puppeteer安装记
Jan 09 Javascript
vue-cli 目录结构详细讲解总结
Jan 15 Javascript
vue基础之事件v-onclick=&quot;函数&quot;用法示例
Mar 11 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 身份证号验证函数
2009/05/07 PHP
joomla内置的表单验证功能使用方法
2010/06/11 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
ZendFramework2连接数据库操作实例
2017/04/18 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
JavaScript 乱码问题
2009/08/06 Javascript
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
2010/02/07 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
javascript的变量、传值、传址、参数之间关系
2015/07/26 Javascript
React.js入门学习第一篇
2016/03/30 Javascript
JavaScript简单获取系统当前时间完整示例
2016/08/02 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
Vue2单一事件管理组件通信
2017/05/09 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
原生JS实现随机点名项目的实例代码
2019/04/30 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
node+multer实现图片上传的示例代码
2020/02/18 Javascript
小程序实现录音功能
2020/09/22 Javascript
vue v-model的用法解析
2020/10/19 Javascript
python写xml文件的操作实例
2014/10/05 Python
Django 连接sql server数据库的方法
2018/06/30 Python
Python自动化之UnitTest框架实战记录
2020/09/08 Python
如何在vscode中安装python库的方法步骤
2021/01/06 Python
小狗电器官方商城:中国高端吸尘器品牌
2017/03/29 全球购物
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
大学应届毕业生个人求职信
2013/09/23 职场文书
电子商务个人职业生涯规划范文
2014/02/12 职场文书
英语导游词
2015/02/13 职场文书
2015年行政人事部工作总结
2015/05/13 职场文书
学校少先队工作总结
2015/08/12 职场文书
关于Javascript闭包与应用的详解
2021/04/22 Javascript
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS
css3带你实现3D转换效果
2022/02/24 HTML / CSS
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL