Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >vue3.0 的 Composition API 的一种使用方法

vue3.0 的 Composition API 的一种使用方法

作者头像
用户1174620
发布于 2020-10-29 02:56:28
发布于 2020-10-29 02:56:28
79000
代码可运行
举报
运行总次数:0
代码可运行

网上讨论的文章已经很多了,这里举一个简单的例子来讨论一下 Composition API 的用法,具体问题才好具体讨论嘛。

假如我们要做一个论坛的讨论列表和分页,以前是把需要的数据都放在data里面,事件都放在methods 里面,代码少的话还好分辨,如果代码多了,看着就头疼了。 现在vue3.0可以按照业务关系分成多个管理类来管理这些代码。

比如帖子列表+发帖功能,我们先做一个模板: (简单表示一下,不做美化处理了)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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代码。 我们可以先写一个帖子列表的管理类,包含帖子列表的数据,和依据页号加载数据的方法。

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 帖子列表的管理类
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),代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 分页管理类
const manageActiclePage = () => {
  const acticleCurrent = ref(0)

  return {
    acticleCurrent
  }
}

最后我们可以在setup里面把这两个管理类给结合起来,一起返回给view。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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引入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { manageArticleForm } from './bbs-manageArticleForm.js'

在setup里面设置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
setup() {
    ......
    // 表单
    const { articleForm, sendArticle } = manageArticleForm()

    // 返回给view
    return {
      ......
      articleForm,
      sendArticle,
      ......
    }
}

写在单独的js文件里面,意味着可以复用。不仅这里可以用,其他的地方也可以直接拿过来用。好吧,这个表单基本没啥可以好复用的,这里只是举个例子。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
做个开源博客学习Vite2 + Vue3 (四)实现博客功能 管理类文件结构config设置路由设置网页入口代码入口首页、博文列表表单 发布博文博文内容 + 讨论博文分组博文列表,编
Composition API,就是组合API的意思,那么是不是应该把js代码分离出来,做成独立的管理类的形式呢?
用户1174620
2021/04/26
8800
做个开源博客学习Vite2 + Vue3 (四)实现博客功能
    




管理类文件结构config设置路由设置网页入口代码入口首页、博文列表表单 发布博文博文内容 + 讨论博文分组博文列表,编
【wiki知识库】04.SpringBoot后端实现电子书的增删改查以及前端界面的展示
今天主要是把这个网页的界面初步优化一下,修改一下导航栏以及增加电子书管理模块。包含电子书的查询功能、新增功能、编辑功能和删除功能(不包括文档管理)。
哈__
2024/06/04
1570
【wiki知识库】04.SpringBoot后端实现电子书的增删改查以及前端界面的展示
vue3,后台管理列表页面各组件之间的状态关系 管理类的功能:查询分页添加、修改删除
前面介绍的表单控件和查询控件,都是原子性的,实现自己的功能即可。 而这里要介绍的是管理后台里面的各个组件之间的状态关系。
用户1174620
2021/07/13
2.1K0
如果你觉得写代码很难,那么请认真读完这篇文章,会让你找到coding的正确姿势!
秒变正经,进入正题,其实还是围绕Ant Design Vue中组件的使用展开,相信我,这并不难。
软件测试君
2022/03/31
7570
如果你觉得写代码很难,那么请认真读完这篇文章,会让你找到coding的正确姿势!
【wiki知识库】05.分类管理实现--前端Vue模块
除了分类管理,我们的首页也变动了一下。首页的导航栏加载的是我们已经有的分类,同时还加上了一个欢迎页面。
哈__
2024/06/06
1240
【wiki知识库】05.分类管理实现--前端Vue模块
【wiki知识库】07.用户管理前端模块的添加-前端部分
这一部分的内容不再多说了,添加一个菜单很简单,只需要在文件中多加一个item,然后item中加上一个路由跳转的标签。最后在配置一下路由就可以了。
哈__
2024/08/06
1020
【wiki知识库】07.用户管理前端模块的添加-前端部分
使用局部状态(轻量级状态)优化博客代码
做个开源博客学习Vite2 + Vue3 (四)实现博客功能 https://www.cnblogs.com/jyk/p/14696474.html
用户1174620
2021/05/13
4430
使用局部状态(轻量级状态)优化博客代码
测试需求平台12-产品模块增改功能实现
✍ 此系列为整理分享已完结入门搭建《TPM提测平台》系列的迭代版,拥抱Vue3.0将前端框架替换成字节最新开源的arco.design,其中约60%重构和20%新增内容,定位为从 0-1手把手实现简单的测试平台开发教程,内容将囊括基础、扩展和实战,由浅入深带你实现测试开发岗位中平台工具技术能力入门和提升。
MegaQi
2023/10/21
2110
测试需求平台12-产品模块增改功能实现
Vue3 Composition API 之 setup 函数
在说 Vue3 之前,我们先看看 Vue2 项目中是如何编写逻辑代码的, 新建一个组件
青年码农
2022/12/13
4650
Vue3 Composition API 之 setup 函数
使用Vue3.0,我收获了哪些知识点(一)
近期工作感觉很忙,都没有多少时间去写文章,今天这篇文章主要是将自己前期学习Vue3.0时候整理的一些笔记内容进行了汇总,通过对本文的阅读,你将可以自己完成Vue3.0环境搭建,同时还会对Vue3.0的一些新的特性进行了解,方便自己进行Vue3.0的学习。本文首发于公众号【前端有的玩】,关注===会了,还有更多面试题等你来刷哦。
前端进击者
2021/07/27
6260
vue3的composition-api实践总结
因为向往已久vue3的开发方式,但是组内有很多历史项目,并且我们受制于ie的支持,所以我们决定在vue2中引入composition-api,来使用他的新特性。在使用过程中,我们遇到了很多问题,也积累了一些经验,所以记录下。
winty
2021/07/27
8850
【wiki知识库】06.文档管理页面的添加--前端Vue部分
在此之前我要要说一件事情,我在做这个模块的时候出现了问题,一个是我们之后要使用的文本编辑器wangeditor无法正常展示,还有一个是弹窗无法关闭的问题。这里我把解决方法告诉大家。
哈__
2024/06/10
1900
【wiki知识库】06.文档管理页面的添加--前端Vue部分
Vue3.0 新特性全面探索 - 基于 Composition Api 快速构建实战项目
建议配合 Visual Studio Code 和 Vue 3 Snippets 代码插件食用Ψ( ̄∀ ̄)Ψ。
wscats
2020/06/06
1.4K0
Vue3实战系列:结合 Ant-Design-of-Vue 实践 Composition API
但是事物总有它的两面性,前端知识更新的很快,利好勤奋好学的同学。计算机行业的迭代速度很快,前端在计算机领域里,算是前浪被拍在沙滩上比较快的。
程序员十三
2020/10/23
1.3K0
测试需求平台11-产品管理交互Acro必要组件掌握
✍ 此系列为整理分享已完结入门搭建《TPM提测平台》系列的迭代版,拥抱Vue3.0将前端框架替换成字节最新开源的arco.design,其中约60%重构和20%新增内容,定位为从 0-1手把手实现简单的测试平台开发教程,内容将囊括基础、扩展和实战,由浅入深带你实现测试开发岗位中平台工具技术能力入门和提升。
MegaQi
2023/10/21
3500
测试需求平台11-产品管理交互Acro必要组件掌握
前端系列14集-Vue3-setup
页面浏览量(Page View,PV)和访客数(Unique Visitors,UV)
达达前端
2023/10/08
4990
前端系列14集-Vue3-setup
基于Ant Design Vue封装一个表单控件
https://github.com/naturefwvue/nf-vue3-ant
用户1174620
2020/09/19
3.2K0
在业务代码中常用到的Vue数据通信方式
本文是笔者总结过往项目,在vue使用到的一些数据通信方案,希望在实际项目中有些帮助和思考。
Maic
2022/07/28
5.2K0
在业务代码中常用到的Vue数据通信方式
做个开源博客学习Vite2 + Vue3 (三)博客设计和代码设计 功能设计代码设计model设计model代码状态设计
项目搭建好了之后是不是可以编码了呢? 等等不要着急,我们是不是应该先设计一下?比如博客的功能等?
用户1174620
2021/04/26
3860
做个开源博客学习Vite2 + Vue3 (三)博客设计和代码设计
    




功能设计代码设计model设计model代码状态设计
讲了个免费的前端项目,小白也能学!
大家好,我是程序员鱼皮。很多朋友都知道,我从 22 年开始带大家做项目,至今已经练习两年半、带做了 10 多套项目。虽然不断产出新项目,但随着时间的流逝和技术的更新,早期录制的项目教程的含金量也会慢慢减少。
程序员鱼皮
2024/12/19
1890
讲了个免费的前端项目,小白也能学!
推荐阅读
做个开源博客学习Vite2 + Vue3 (四)实现博客功能 管理类文件结构config设置路由设置网页入口代码入口首页、博文列表表单 发布博文博文内容 + 讨论博文分组博文列表,编
8800
【wiki知识库】04.SpringBoot后端实现电子书的增删改查以及前端界面的展示
1570
vue3,后台管理列表页面各组件之间的状态关系 管理类的功能:查询分页添加、修改删除
2.1K0
如果你觉得写代码很难,那么请认真读完这篇文章,会让你找到coding的正确姿势!
7570
【wiki知识库】05.分类管理实现--前端Vue模块
1240
【wiki知识库】07.用户管理前端模块的添加-前端部分
1020
使用局部状态(轻量级状态)优化博客代码
4430
测试需求平台12-产品模块增改功能实现
2110
Vue3 Composition API 之 setup 函数
4650
使用Vue3.0,我收获了哪些知识点(一)
6260
vue3的composition-api实践总结
8850
【wiki知识库】06.文档管理页面的添加--前端Vue部分
1900
Vue3.0 新特性全面探索 - 基于 Composition Api 快速构建实战项目
1.4K0
Vue3实战系列:结合 Ant-Design-of-Vue 实践 Composition API
1.3K0
测试需求平台11-产品管理交互Acro必要组件掌握
3500
前端系列14集-Vue3-setup
4990
基于Ant Design Vue封装一个表单控件
3.2K0
在业务代码中常用到的Vue数据通信方式
5.2K0
做个开源博客学习Vite2 + Vue3 (三)博客设计和代码设计 功能设计代码设计model设计model代码状态设计
3860
讲了个免费的前端项目,小白也能学!
1890
相关推荐
做个开源博客学习Vite2 + Vue3 (四)实现博客功能 管理类文件结构config设置路由设置网页入口代码入口首页、博文列表表单 发布博文博文内容 + 讨论博文分组博文列表,编
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验