详解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操作ajax返回的json的注意问题!
Feb 23 Javascript
读jQuery之五(取DOM元素)
Jun 20 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
Jan 22 Javascript
javascript实现图片自动和可控的轮播切换特效
Apr 13 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
May 04 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
Jun 23 Javascript
jQuery Uploadify 上传插件出现Http Error 302 错误的解决办法
Dec 12 Javascript
基于JQuery实现分隔条的功能
Jun 17 Javascript
JS实现滑动门效果的方法详解
Dec 19 Javascript
原生JS实现左右箭头选择日期实例代码
Mar 14 Javascript
jQuery滑动效果实现方法分析
Sep 05 jQuery
Vue实现图书管理小案例
Dec 03 Vue.js
vue3.0 加载json的方法(非ajax)
Oct 26 #Javascript
Vue+Element自定义纵向表格表头教程
Oct 26 #Javascript
vue3.0 的 Composition API 的使用示例
Oct 26 #Javascript
Vue中用JSON实现刷新界面不影响倒计时
Oct 26 #Javascript
jQuery实现简单评论区功能
Oct 26 #jQuery
vue.js封装switch开关组件的操作
Oct 26 #Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
Oct 26 #Javascript
You might like
PHP批量生成缩略图的代码
2008/07/19 PHP
解析php file_exists无效的解决办法
2013/06/26 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
PHP模板引擎Smarty中变量的使用方法示例
2016/04/11 PHP
js清空form表单中的内容示例
2014/05/20 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
jQuery 3.0十大新特性
2016/07/06 Javascript
概述如何实现一个简单的浏览器端js模块加载器
2016/12/07 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
基于JS递归函数细化认识及实用实例(推荐)
2017/08/07 Javascript
纯js封装的ajax功能函数与用法示例
2018/05/14 Javascript
ES6 中可以提升幸福度的小功能
2018/08/06 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
[01:34]2016国际邀请赛中国区预选赛IG战队教练采访
2016/06/27 DOTA
python实现巡检系统(solaris)示例
2014/04/02 Python
python实现对excel进行数据剔除操作实例
2017/12/07 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
详解Python3 pickle模块用法
2019/09/16 Python
python 如何使用find和find_all爬虫、找文本的实现
2020/10/16 Python
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
2015/03/25 面试题
JAVA高级程序员面试题
2013/09/06 面试题
大三毕业自我鉴定
2014/01/15 职场文书
2014年班组建设工作总结
2014/12/01 职场文书
2014年小学体育工作总结
2014/12/11 职场文书
见义勇为事迹材料
2014/12/24 职场文书
监理中标通知书
2015/04/16 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
python flask开发的简单基金查询工具
2021/06/02 Python
JavaScript实现两个数组的交集
2022/03/25 Javascript