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与jquery中获取当前鼠标的x、y坐标位置的代码
May 23 Javascript
file控件选择上传文件确定后触发的js事件是哪个
Mar 17 Javascript
jQuery遍历DOM节点操作之filter()方法详解
Apr 14 Javascript
基于JavaScript Array数组方法(新手必看篇)
Aug 20 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
Nov 07 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
Mar 21 Javascript
Linux CentOS系统下安装node.js与express的方法
Apr 01 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
May 24 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
Sep 14 Javascript
AngularJS 表单验证手机号的实例(非必填)
Nov 12 Javascript
Vue render函数实战之实现tabs选项卡组件
Apr 22 Javascript
layui表格 返回的数据状态异常的解决方法
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
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
2013/06/28 PHP
php中session退出登陆问题
2014/02/27 PHP
php在线解压ZIP文件的方法
2014/12/30 PHP
php使用自定义函数实现汉字分割替换功能示例
2017/01/30 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
Javascript中暂停功能的实现代码
2007/03/04 Javascript
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
jquery实现图片灯箱明暗的遮罩效果
2013/11/15 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
javascript实现的字符串与十六进制表示字符串相互转换方法
2015/07/17 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
2015/11/25 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
2016/05/26 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
Bootstrap常用组件学习(整理)
2017/03/24 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
关于TypeScript模块导入的那些事
2018/06/12 Javascript
Vue-cli@3.0 插件系统简析
2018/09/05 Javascript
bootstrap table实现iview固定列的效果实例代码详解
2019/09/30 Javascript
在vue中使用jsx语法的使用方法
2019/09/30 Javascript
封装Vue Element的table表格组件的示例详解
2020/08/19 Javascript
Python tkinter模块中类继承的三种方式分析
2017/08/08 Python
Python3中bytes类型转换为str类型
2018/09/27 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
pytorch 常用线性函数详解
2020/01/15 Python
python numpy数组中的复制知识解析
2020/02/03 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
HTML5自定义元素播放焦点图动画的实现
2019/09/25 HTML / CSS
大专计算机个人求职的自我评价
2013/10/21 职场文书
自荐书模板
2013/12/19 职场文书
学雷锋活动总结报告
2014/06/26 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
div与span之间的区别与使用介绍
2021/12/06 HTML / CSS
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫