详解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 相关文章推荐
替代window.event.srcElement效果的可兼容性的函数
Dec 18 Javascript
jQuery数据缓存功能的实现思路及简单模拟
May 27 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
Nov 25 Javascript
jQuery简单几行代码实现tab切换
Mar 10 Javascript
深入理解JavaScript编程中的同步与异步机制
Jun 24 Javascript
jquery简单实现幻灯片的方法
Aug 03 Javascript
总结几道关于Node.js的面试问题
Jan 11 Javascript
js中Number数字数值运算后值不对的解决方法
Feb 28 Javascript
js实现常见的工具条效果
Mar 02 Javascript
详解利用 Express 托管静态文件的方法
Sep 18 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
May 15 Javascript
React 源码中的依赖注入方法
Nov 07 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
自己动手做一个SQL解释器
2006/10/09 PHP
php实现12306余票查询、价格查询示例
2014/04/17 PHP
让CodeIgniter的ellipsize()支持中文截断的方法
2014/06/12 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
PHP判断手机是IOS还是Android
2015/12/09 PHP
浅谈PHP命令执行php文件需要注意的问题
2016/12/16 PHP
node.js中的fs.rmdirSync方法使用说明
2014/12/16 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
vue使用drag与drop实现拖拽的示例代码
2017/09/07 Javascript
关于预加载InstantClick的问题解决方法
2017/09/12 Javascript
JavaScript判断输入是否为数字类型的方法总结
2017/09/28 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
Node.Js中实现端口重用原理详解
2018/05/03 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
VUE v-model表单数据双向绑定完整示例
2019/01/21 Javascript
React实现轮播效果
2020/08/25 Javascript
[00:34]拔城逐梦,热血永恒!2020(秋)完美世界城市挑战赛报名开启
2020/10/09 DOTA
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
Python实现抓取网页并且解析的实例
2014/09/20 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
Python二元赋值实用技巧解析
2019/10/25 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
Keras 实现加载预训练模型并冻结网络的层
2020/06/15 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
如何使用python写截屏小工具
2020/09/29 Python
智利最大的网上商店:Linio智利
2016/11/24 全球购物
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
妇产医师自荐信
2014/01/29 职场文书
综合实践活动总结
2014/05/05 职场文书
小学教代会开幕词
2016/03/04 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
Python Django 后台管理之后台模型属性详解
2021/04/25 Python
Python中使用ipython的详细教程
2021/06/22 Python
Nginx速查手册及常见问题
2022/04/07 Servers