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 相关文章推荐
javascript下有关dom以及xml节点访问兼容问题
Nov 26 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
May 28 Javascript
angularJS提交表单(form)
Feb 09 Javascript
jQuery表格行上移下移和置顶的实现方法
Oct 08 Javascript
Bootstrap每天必学之栅格系统(布局)
Nov 25 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
Feb 26 Javascript
原生js实现吸顶效果
Mar 13 Javascript
深入理解vue路由的使用
Mar 24 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
Dec 20 Javascript
IDEA安装vue插件图文详解
Sep 26 Javascript
解决 window.onload 被覆盖的问题方法
Jan 14 Javascript
vue实现淘宝购物车功能
Apr 20 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
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
详解PHP原生DOM对象操作XML的方法
2016/10/17 PHP
eval的两组性能测试数据
2012/08/17 Javascript
js indexOf()定义和用法
2012/10/21 Javascript
javascript中字符串拼接详解
2014/09/26 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
JavaScript操作DOM元素的childNodes和children区别
2015/04/01 Javascript
Bootstrap的Refresh Icon也spin起来
2016/07/13 Javascript
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
使用JavaScript获取URL中的参数(两种方法)
2016/11/16 Javascript
vue 项目常用加载器及配置详解
2018/01/22 Javascript
js取小数点后两位四种方法
2019/01/18 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
Python中IPYTHON入门实例
2015/05/11 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
python利用不到一百行代码实现一个小siri
2017/03/02 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
2019/01/30 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
python openpyxl使用方法详解
2019/07/18 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
2019/08/07 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
python自动化办公操作PPT的实现
2021/02/05 Python
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
优秀应届生推荐信
2013/11/09 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
事务机电主管工作职责
2014/02/25 职场文书
保险专业大学生职业规划书
2014/03/03 职场文书
暑期政治学习心得体会
2014/09/02 职场文书
房产转让协议书(2014版)
2014/09/30 职场文书
钱塘江大潮导游词
2015/02/03 职场文书
财务个人年度总结范文
2015/02/26 职场文书
大学迎新生欢迎词
2015/09/29 职场文书
基于Python实现射击小游戏的制作
2022/04/06 Python