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笔试题目附答案@20081025_jb51.net
Oct 26 Javascript
将json当数据库一样操作的javascript lib
Oct 28 Javascript
Node.js下自定义错误类型详解
Oct 17 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
Jun 09 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
Jul 19 Javascript
微信小程序实现一张或多张图片上传(云开发)
Sep 25 Javascript
js单线程的本质 Event Loop解析
Oct 29 Javascript
微信小程序select下拉框实现源码
Nov 08 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
Dec 04 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
Jan 21 Javascript
浅谈JS for循环中使用break和continue的区别
Jul 21 Javascript
vue浏览器返回监听的具体步骤
Feb 03 Vue.js
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
php图片的二进制转换实现方法
2014/12/15 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
2015/11/27 PHP
PHP设计模式之注册树模式分析
2018/01/26 PHP
javascript中的数字与字符串相加实例分析
2011/08/14 Javascript
node.js实现爬虫教程
2020/08/25 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
利用原生JS自动生成文章标题树的实例
2016/08/22 Javascript
JS动态加载脚本并执行回调操作
2016/08/24 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
微信小程序 天气预报开发实例代码源码
2017/01/20 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
Vue动态获取width的方法
2018/08/22 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
js tab栏切换代码实例解析
2019/09/03 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
基于Vue中的父子传值问题解决
2020/07/27 Javascript
Python中使用PyQt把网页转换成PDF操作代码实例
2015/04/23 Python
Djang中静态文件配置方法
2015/07/30 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
Python微信操控itchat的方法
2019/05/31 Python
django rest framework vue 实现用户登录详解
2019/07/29 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
Python tkinter界面实现历史天气查询的示例代码
2020/08/23 Python
python按照list中字典的某key去重的示例代码
2020/10/13 Python
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
ET Mall东森购物网:东森严选
2017/03/06 全球购物
股权收购意向书
2014/04/01 职场文书
环保倡议书100字
2014/05/15 职场文书
企业宣传策划方案
2014/05/29 职场文书
2014年国庆标语
2014/06/30 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
单位接收函格式
2015/01/30 职场文书
2015年学校教育教学工作总结
2015/04/22 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书