详解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 对象、函数和继承
Jul 07 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
Sep 21 Javascript
Javascript级联下拉菜单以及AJAX数据验证核心代码
May 10 Javascript
Jquery实现的一种常用高亮效果示例代码
Jan 28 Javascript
使用npm发布Node.JS程序包教程
Mar 02 Javascript
javascript实现dom元素可拖动
Mar 21 Javascript
jQuery绑定事件的几种实现方式
May 09 Javascript
详解Node.js中的事件机制
Sep 22 Javascript
Vue中的字符串模板的使用
May 17 Javascript
vue 中动态绑定class 和 style的方法代码详解
Jun 01 Javascript
javascript随机变色实例代码
Oct 15 Javascript
vue里使用create, mounted调用方法
Apr 26 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 setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
修改PHP的memory_limit限制的方法分享
2012/02/21 PHP
PHP的curl实现get,post和cookie(实例介绍)
2013/06/17 PHP
Php output buffering缓存及程序缓存深入解析
2013/07/15 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
2015/10/16 PHP
PHP微信API接口类
2016/08/22 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
2016/04/17 Javascript
JavaScript语言精粹经典实例(整理篇)
2016/06/07 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
2016/10/24 Javascript
ES6 javascript的异步操作实例详解
2017/10/30 Javascript
如何测量vue应用运行时的性能
2019/06/21 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
小程序实现点击tab切换左右滑动
2020/11/16 Javascript
django+js+ajax实现刷新页面的方法
2017/05/22 Python
python实现list由于numpy array的转换
2018/04/04 Python
python 统计列表中不同元素的数量方法
2018/06/29 Python
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
django连接oracle时setting 配置方法
2019/08/29 Python
python数值基础知识浅析
2019/11/19 Python
浅谈keras.callbacks设置模型保存策略
2020/06/18 Python
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
师范院校学生自荐信范文
2013/12/27 职场文书
运动会广播稿20字
2014/02/18 职场文书
信息管理专业自荐书
2014/06/05 职场文书
学雷锋倡议书
2015/01/19 职场文书
邀请函格式范文
2015/02/02 职场文书
行政二审代理词
2015/05/25 职场文书
2019年市场部个人述职报告(三篇)
2019/10/23 职场文书
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript