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 计算两个整数的百分比值
Dec 26 Javascript
js中一维数组和二位数组中的几个问题示例说明
Jul 17 Javascript
js与C#进行时间戳转换
Nov 14 Javascript
JavaScript中的函数嵌套使用
Jun 04 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
Aug 22 Javascript
javascript事件冒泡简单示例
Jun 20 Javascript
简单谈谈JS中的正则表达式
Sep 11 Javascript
JavaScript for循环 if判断语句(学习笔记)
Oct 11 Javascript
Vue动态控制input的disabled属性的方法
Jun 26 Javascript
Vue 实现手动刷新组件的方法
Feb 19 Javascript
深入浅出了解Node.js Streams
May 27 Javascript
JavaScript常用工具函数汇总(浏览器环境)
Sep 17 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
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
基于mysql的论坛(3)
2006/10/09 PHP
PHP如何抛出异常处理错误
2011/03/02 PHP
PHP连接和操作MySQL数据库基础教程
2014/09/29 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
PHP fopen中文文件名乱码问题解决方案
2020/10/28 PHP
JavaScript实现找质数代码分享
2015/03/24 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
2015/06/11 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
浅谈React前后端同构防止重复渲染
2018/01/05 Javascript
详解redis在nodejs中的应用
2018/05/02 NodeJs
vue实现局部刷新的实现示例
2019/04/16 Javascript
vue实现图片上传功能
2020/05/28 Javascript
vue数据更新UI不刷新显示的解决办法
2020/08/06 Javascript
Python中删除文件的程序代码
2011/03/13 Python
有关wxpython pyqt内存占用问题分析
2014/06/09 Python
Python中的引用和拷贝浅析
2014/11/22 Python
在Python中使用zlib模块进行数据压缩的教程
2015/06/26 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
详解Python是如何实现issubclass的
2019/07/24 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
H5 canvas中width、height和style的宽高区别详解
2018/11/02 HTML / CSS
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
详解HTML5常用的语义化标签
2019/09/27 HTML / CSS
美国糖果店:Sugarfina
2019/02/21 全球购物
应聘教师自荐信
2013/10/12 职场文书
公司面试感谢信
2014/02/01 职场文书
护士求职自荐信范文
2014/03/19 职场文书
中班上学期幼儿评语
2014/04/30 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
毕业证丢失证明范本
2014/09/20 职场文书