详解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 相关文章推荐
jQuery总体架构的理解分析
Mar 07 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
Jan 23 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
Oct 29 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
Dec 23 Javascript
javascript抽象工厂模式详细说明
Dec 16 Javascript
Javascript添加监听与删除监听用法详解
Dec 19 Javascript
javascript每日必学之循环
Feb 19 Javascript
jQuery中常用动画效果函数(日常整理)
Sep 17 Javascript
JS实现太极旋转思路分析
Dec 09 Javascript
基于vue.js实现的分页
Mar 13 Javascript
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
May 08 Javascript
dts文件中删除一个node或属性的操作方法
Aug 05 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
flash用php连接数据库的代码
2011/04/21 PHP
PHP如何解决网站大流量与高并发的问题
2011/06/25 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
2013/08/07 PHP
php使用socket post数据到其它web服务器的方法
2015/06/02 PHP
thinkphp微信开发(消息加密解密)
2015/12/02 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
用jQuery技术实现Tab页界面之二
2009/09/21 Javascript
一些常用的JavaScript函数(json)附详细说明
2011/05/25 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
jQuery中:first-child选择器用法实例
2014/12/31 Javascript
JavaScript获取当前网页最后修改时间的方法
2015/04/03 Javascript
JavaScript实现99乘法表及隔行变色实例代码
2016/02/24 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
Javascript实现代码折叠功能
2016/08/25 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
Vue3为什么这么快
2020/09/23 Javascript
ReactRouter的实现方法
2021/01/25 Javascript
python+opencv实现动态物体识别
2018/01/09 Python
HTML5里的placeholder属性使用实例和美化显示效果的方法
2014/04/23 HTML / CSS
中国跨境电子商务网站:NewFrog
2018/03/10 全球购物
机电一体化职业规划书
2014/01/07 职场文书
实习生自我评价
2014/01/18 职场文书
于丹论语心得观后感
2015/06/15 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书
干货:我将这样书写我的演讲稿!
2019/05/09 职场文书
Django 如何实现文件上传下载
2021/04/08 Python
pytorch损失反向传播后梯度为none的问题
2021/05/12 Python