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验证表单第二部分
Nov 25 Javascript
无语,javascript居然支持中文(unicode)编程!
Apr 12 Javascript
js中iframe调用父页面的方法
Oct 30 Javascript
JavaScript实现将文本框的值插入指定位置的方法
Aug 13 Javascript
Node.js connect ECONNREFUSED错误解决办法
Sep 15 Javascript
node.js学习之交互式解释器REPL详解
Dec 08 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
Jul 19 Javascript
JavaScript使用递归和循环实现阶乘的实例代码
Aug 28 Javascript
Javascript 关于基本类型和引用类型的个人理解
Nov 01 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
Apr 08 Javascript
基于JavaScript实现控制下拉列表
May 08 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
May 14 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
php 什么是PEAR?
2009/03/19 PHP
如何解决CI框架的Disallowed Key Characters错误提示
2013/07/05 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
PHP实现的迷你漂流瓶
2015/07/29 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
javascript tips提示框组件实现代码
2010/11/19 Javascript
解析jquery中的ajax缓存问题
2013/12/19 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
使用rst2pdf实现将sphinx生成PDF
2016/06/07 Python
Python列表和元组的定义与使用操作示例
2017/07/26 Python
python数据封装json格式数据
2018/03/04 Python
创建pycharm的自定义python模板方法
2018/05/23 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
Python实现通过继承覆盖方法示例
2018/07/02 Python
flask-restful使用总结
2018/12/04 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
init进程的作用
2012/04/12 面试题
医院后勤自我鉴定
2013/10/13 职场文书
住房公积金接收函
2014/01/09 职场文书
写给妈妈的道歉信
2014/01/11 职场文书
乡镇交通安全实施方案
2014/03/29 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
初中升旗仪式演讲稿
2014/05/08 职场文书
青年文明号汇报材料
2014/12/23 职场文书
庆七一活动简报
2015/07/20 职场文书
2016消防宣传标语口号
2015/12/26 职场文书
python开发的自动化运维工具ansible详解
2021/08/07 Python
MySQL 服务和数据库管理
2021/11/11 MySQL
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
2021/11/11 Python
nginx共享内存的机制详解
2022/03/21 Servers