vue3.0 的 Composition API 的一种使用方法
网上讨论的文章已经很多了,这里举一个简单的例子来讨论一下 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 的一种使用方法的更多相关文章
- 来自 Vue 3.0 的 Composition API 尝鲜
来自 Vue 3.0 的 Composition API 尝鲜:https://segmentfault.com/a/1190000020205747
- 在C#中使用RESTful API的几种好方法
什么是Restful API REST 即Representational State Transfer的缩写.直接翻译的意思是"表现层状态转化". 它是一种互联网应用程序的API ...
- Vue3:不常用的Composition API && Fragment、Teleport、Suspense && 与Vue2对比的一些变化
1 # 一.Vue3不常用的Composition API 2 # 1.shallowReactive与shallowRef 3 .shallowReactive: 只处理对象最外层属性的响应式(浅响 ...
- Vue 3.0 Composition API - 中文翻译
Composition API 发布转载请附原文链接 https://www.cnblogs.com/zgh-blog/articles/composition_api.html 这两天初步了解了下 ...
- Vue3全家桶升级指南一composition API
1.setup() vue3中的composition API中最重要的就是setup方法了,相当于组件的入口,所有的composition API都必须放到setup()中的使用. setup是在组 ...
- Vue3.0系列——「vue3.0性能是如何变快的?」
前言 先学习vue2.x,很多2.x内容依然保留: 先学习TypeScript,vue3.0是用TS重写的,想知其然知其所以然必须学习TS. 为什么学习vue3.0? 性能比vue2.x快1.2-2倍 ...
- vue3.0安装
一 .vue3.0安装 vue3.0安装 个人推荐以下2种 (1). 开发工具的对应代码中 插入CDN <script src="https://unpkg.com/vue@next& ...
- 基于 Vue3.0 Composition Api 快速构建实战项目
Quick Start 项目源码:https://github.com/Wscats/vue-cli 本项目综合运用了 Vue3.0 的新特性,适合新手学习
- vue3.0 composition API
一.Setup函数 1.创建时间:组件创建之前被调用,优先与created被调用,this指向的实例为window,created所指向的实例为proxy 2.this指向:不会指向组件实例 3.参数 ...
随机推荐
- 说说我对 WSGI 的理解
先说下 WSGI 的表面意思,Web Server Gateway Interface 的缩写,即 Web 服务器网关接口. 之前不知道 WSGI 意思的伙伴,看了上面的解释后,我估计也还是不清楚,所 ...
- RabbitMQ安装、集群搭建、概念解析
RabbitMQ安装.集群搭建.概念解析 基本概念 为什么会产生MQ 1.解耦:采用异步方式实现业务需求达到解耦的目的. 2.缓冲流量,削峰填谷: 问:为什么会有流量冲击? 答:采用"直接调 ...
- 操作系统(AIX)双因素身份认证解决方案-中科恒伦CKEY DAS
一.场景分析 操作系统是管理计算机硬件与软件资源的计算机程序,用于工作中的进程管理.存储管理.设备管理.文件管理.作业管理等,十分重要,安全等级极高! 二.问题分析 1.密码设置简单,非常容易被撞 ...
- 项目升级springboot2.0注意事项
一.pring boot 2.0以后, springboot jpa findById 返回类型变化@NoRepositoryBeanpublic interface CrudRepository&l ...
- 安装了高版本OS X 之后无法使用MacPorts的port命令
安装了高版本OS X 之后无法使用MacPorts的port命令 pod update提示: Current platform "darwin 14" does not match ...
- MySQL5.7用户创建及权限管理
一 用户.权限管理 1.1 用户 作用: 登录,管理数据库逻辑对象 定义: 用户名@'主机值' 主机值可以是主机名或IP地址,主机值中允许使用通配符 root@'10.0.0.%' root@'%' ...
- layui动态添加选项卡
<!DOCTYPE html><html xmlns:th="http://www.thymeleaf.org"><head> <meta ...
- Centos-远程拷贝-scp
scp 依赖ssh协议,实现从哟个linux系统拷贝到另一个linux系统 格式 scp -P port localPath user@IP:targetPath # 如果拷贝的是文件则需要传递 -r ...
- 055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念
055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...
- python数据结构之二叉树的建立实例
先建立二叉树节点,有一个data数据域,left,right 两个指针域 # coding:utf-8 class TreeNode(object): def __init__(self,left=N ...