详解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之学会吝啬 精简代码
Apr 25 Javascript
jQuery标签替换函数replaceWith()的使用例子
Aug 28 Javascript
JavaScript sub方法入门实例(把字符串显示为下标)
Oct 17 Javascript
详解JS面向对象编程
Jan 24 Javascript
JavaScript自学笔记(必看篇)
Jun 23 Javascript
浅谈js中调用函数时加不加括号的问题
Jul 28 Javascript
jQuery实现的无缝广告图片左右滚动功能详解
Dec 24 Javascript
javascript 中的继承实例详解
May 05 Javascript
解决vue 打包发布去#和页面空白的问题
Sep 04 Javascript
Angular CLI 使用教程指南参考小结
Apr 10 Javascript
微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能
Jul 20 Javascript
基于vue-cli3和element实现登陆页面
Nov 13 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
xml转json的js代码
2012/08/28 Javascript
extjs 04_grid 单击事件新发现
2012/11/27 Javascript
浅析document.createDocumentFragment()与js效率
2013/07/08 Javascript
ExtJS4中的requires使用方法示例介绍
2013/12/03 Javascript
js 操作符汇总
2014/11/08 Javascript
node.js中的dns.getServers方法使用说明
2014/12/08 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
2015/03/18 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
详解Webpack多环境代码打包的方法
2018/08/03 Javascript
基于游标的分页接口实现代码示例
2018/11/12 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
VUE实现移动端列表筛选功能
2019/08/23 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
windows下ipython的安装与使用详解
2016/10/20 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
2017/01/20 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
Python实现快速大文件比较代码解析
2020/09/04 Python
Python 创建守护进程的示例
2020/09/29 Python
用python批量移动文件
2021/01/14 Python
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
美国领先的汽车轮胎和轮毂供应商:TireBuyer
2016/07/21 全球购物
劳动竞赛口号
2014/06/16 职场文书
放飞梦想演讲稿600字
2014/08/26 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
2021/06/11 Python
node.js如何自定义实现一个EventEmitter
2021/07/16 Javascript
JS中如何优雅的使用async await详解
2021/10/05 Javascript
详解python的异常捕获
2022/03/03 Python
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android
TS 类型收窄教程示例详解
2022/09/23 Javascript