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相等运算符与等同运算符详细介绍
Nov 09 Javascript
gridview生成时如何去掉style属性中的border-collapse
Sep 30 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
Oct 14 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
Feb 09 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
Sep 18 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
Sep 19 jQuery
webpack 单独打包指定JS文件的方法
Feb 22 Javascript
jQuery简单实现根据日期计算星期几的方法
Jan 09 jQuery
JS实现将对象转化为数组的方法分析
Jan 21 Javascript
微信小程序在线客服自动回复功能(基于node)
Jul 03 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
Aug 05 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
Jan 07 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
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
jQuery UI 实现email输入提示实例
2013/08/15 Javascript
js图片向右一张张滚动效果实例代码
2013/11/23 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
2014/04/20 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
angular+webpack2实战例子
2017/05/23 Javascript
jquery拖动改变div大小
2017/07/04 jQuery
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
JavaScript中this函数使用实例解析
2020/02/21 Javascript
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
跟老齐学Python之使用Python操作数据库(1)
2014/11/25 Python
Python中SOAP项目的介绍及其在web开发中的应用
2015/04/14 Python
使用Python下的XSLT API进行web开发的简单教程
2015/04/15 Python
详解Python中的Descriptor描述符类
2016/06/14 Python
python虚拟环境virualenv的安装与使用
2016/12/18 Python
5款非常棒的Python工具
2018/01/05 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
python实现键盘输入的实操方法
2019/07/16 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
巴西购物网站:Estrela10
2018/12/13 全球购物
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
中文专业毕业生自荐信
2013/10/28 职场文书
初三新学期计划书
2014/05/03 职场文书
金融与证券专业求职信
2014/06/22 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
安全教育第一课观后感
2015/06/17 职场文书
Nest.js参数校验和自定义返回数据格式详解
2021/03/29 Javascript
Canvas绘制像素风图片的示例代码
2021/09/25 HTML / CSS
对讲机的最大通讯距离是多少
2022/02/18 无线电