详解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动态往表格的td中添加图片并注册事件
Jun 12 Javascript
jQuery插件开发的五种形态小结
Mar 04 Javascript
深入探讨Vue.js组件和组件通信
Sep 12 Javascript
js学习之----深入理解闭包
Nov 21 Javascript
详解Angular 自定义结构指令
Jun 21 Javascript
vue.js的computed,filter,get,set的用法及区别详解
Mar 08 Javascript
浅谈Vue响应式(数组变异方法)
May 07 Javascript
详解JSON和JSONP劫持以及解决方法
Mar 08 Javascript
详解vue使用插槽分发内容slot的用法
Mar 28 Javascript
vue 解决文本框被键盘遮住的问题
Nov 06 Javascript
weui上传多图片,压缩,base64编码的示例代码
Jun 22 Javascript
javascript+css实现俄罗斯方块小游戏
Jun 28 Javascript
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教程 插件机制在PHP中实现方案
2012/11/02 PHP
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
php使用$_POST或$_SESSION[]向js函数传参
2014/09/16 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
jQuery的实现原理的模拟代码 -1 核心部分
2010/08/01 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
2013/04/24 Javascript
jquery利用ajax调用后台方法实例
2013/08/23 Javascript
Jquery实现Div上下移动示例
2014/04/23 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
jQuery获得字体颜色16位码的方法
2016/02/20 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
分享两段简单的JS代码防止SQL注入
2016/04/12 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
2016/04/17 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
2020/11/30 Javascript
JavaScript实现反转字符串的方法详解
2017/04/27 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
小程序自定义组件实现城市选择功能
2018/07/18 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
浅析Python数据处理
2018/05/02 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
Python自带的IDE在哪里
2020/07/01 Python
文秘专业毕业生就业推荐信
2013/11/08 职场文书
护理毕业生自我鉴定
2014/02/11 职场文书
安全标准化实施方案
2014/02/20 职场文书
应届生求职自荐信范文
2014/04/07 职场文书
优秀毕业生找工作自荐信
2014/06/23 职场文书
乡镇八一建军节活动方案
2014/08/24 职场文书
教师个人成长总结
2015/02/11 职场文书
教师节倡议书2015
2015/04/27 职场文书
海上钢琴师观后感
2015/06/03 职场文书