详解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 form表单提交插件asp.net后台中文解码
Jun 12 Javascript
Javascript页面添加到收藏夹的简单方法
Aug 07 Javascript
比较新旧两个数组值得增加和删除的JS代码
Oct 30 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
Mar 26 Javascript
Bootstrap每天必学之附加导航(Affix)插件
Apr 25 Javascript
vue父子组件的数据传递示例
Mar 07 Javascript
bootstrap的工具提示实例代码
May 17 Javascript
vuejs手把手教你写一个完整的购物车实例代码
Jul 06 Javascript
node puppeteer(headless chrome)实现网站登录
May 09 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
Sep 19 Javascript
使用vue-router在Vue页面之间传递数据的方法
Jul 15 Javascript
vue自动化路由的实现代码
Sep 30 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
解析php中curl_multi的应用
2013/07/17 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
2019/02/16 PHP
jquery图片上下tab切换效果
2011/03/18 Javascript
php与js的区别是什么
2013/08/05 Javascript
jquery及原生js获取select下拉框选中的值示例
2013/10/25 Javascript
js控制当再次点击按钮时的间隔时间
2014/06/03 Javascript
[原创]推荐10款最热门jQuery UI框架
2014/08/19 Javascript
控制台报错object is not a function的解决方法
2014/08/24 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
Javascript实现鼠标右键特色菜单
2015/08/04 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
vue相同路由跳转强制刷新该路由组件操作
2020/08/05 Javascript
前端开发基础javaScript的六大作用
2020/08/06 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
2020/10/29 Javascript
jQuery实现电梯导航模块
2020/12/22 jQuery
Python生成验证码实例
2014/08/21 Python
详细介绍Ruby中的正则表达式
2015/04/10 Python
Python实现SMTP发送邮件详细教程
2021/03/02 Python
Python安装图文教程 Pycharm安装教程
2018/03/27 Python
详解Python3.6安装psutil模块和功能简介
2018/05/30 Python
Python打包方法Pyinstaller的使用
2018/10/09 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
Pytorch释放显存占用方式
2020/01/13 Python
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
Canvas globalCompositeOperation
2018/12/18 HTML / CSS
法国家具及室内配件店:home24
2017/01/21 全球购物
香港网上花店:FlowerAdvisor香港
2019/05/30 全球购物
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
力学专业毕业生自荐信
2013/11/17 职场文书
启动仪式策划方案
2014/06/14 职场文书
商务英语专业求职信
2014/06/26 职场文书
让文件路径提取变得更简单的Python Path库
2021/05/27 Python
MySQL中in和exists区别详解
2021/06/03 MySQL