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网络游戏-(模拟城市webgame)提供的一些例子下载
Oct 14 Javascript
在线编辑器中换行与内容自动提取
Apr 24 Javascript
javascript instanceof,typeof的区别
Mar 24 Javascript
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
Jun 10 Javascript
jquery ajax 局部刷新小案例
Feb 08 Javascript
js css 实现遮罩层覆盖其他页面元素附图
Sep 22 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
Aug 26 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
Jan 28 Javascript
详解Vue微信公众号开发踩坑全记录
Aug 21 Javascript
vue移动端轻量级的轮播组件实现代码
Jul 12 Javascript
浅析Vue.js 中的条件渲染指令
Nov 19 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
Nov 05 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+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
2006/12/16 PHP
PHP数据流应用的一个简单实例
2012/09/14 PHP
使用phpQuery采集网页的方法
2013/11/13 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
php实现记事本案例
2020/10/20 PHP
PHP中SESSION过期设置
2021/03/09 PHP
JavaScript实现动态增加文件域表单
2009/02/12 Javascript
JavaScript中的面向对象介绍
2012/06/30 Javascript
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
window.location.href中url中数据量太大时的解决方法
2013/12/23 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
Javascript必知必会(四)js类型转换
2016/06/08 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
浅谈javascript中的数据类型转换
2016/12/27 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
JS根据json数组多个字段排序及json数组常用操作
2019/06/06 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
Electron整合React使用搭建开发环境的步骤详解
2020/06/07 Javascript
浅谈vue中resetFields()使用注意事项
2020/08/12 Javascript
[04:00]DOTA2解说界神雕侠侣 CJ第四天谷子现场过生日
2013/07/30 DOTA
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
Python编程scoketServer实现多线程同步实例代码
2018/01/29 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
美国嘻哈文化生活方式品牌:GLD
2018/04/15 全球购物
Burt’s Bees英国官网:世界领先的天然个人护理品牌
2020/08/17 全球购物
化学相关工作求职信
2013/10/02 职场文书
大三学生做职业规划:给未来找个方向
2014/02/24 职场文书
赡养老人协议书
2014/04/21 职场文书
教师敬业奉献模范事迹材料
2014/05/18 职场文书
2014年商场国庆节活动策划方案
2014/09/16 职场文书