浅析vue3中setup()和reactive()函数的使用

本篇文章带大家聊聊vue3项目中组合式api基础概念、setup()入口函数概念、 reactive()的使用方法,希望对大家有所帮助!

浅析vue3中setup()和reactive()函数的使用

一、组合式API对比vue2项目结构

在vue2当中

1.优点:易于学习和使用,写代码的位置已经约定好。

2.缺点:对于大型项目,不利于代码的复用、不利于管理和维护。

立即学习“前端免费学习笔记(深入)”;

3.解释:同一功能的数据和业务逻辑分散在同一个文件的 N 个地方,随着业务复杂度的上升,我们需要经常在类似于data()以及methods中进行来回的处理

在vue3当中

1.优点:可以把同一功能的数据和业务逻辑组织到一起,方便复用和维护。

2.缺点:需要有良好的代码组织和拆分能力,相对没有 Vue2 容易上手。

3.解释:注意:为了能让大家较好的过渡到 Vue3.0 版本,目前也是支持 Vue2.x 选项 API 的写法。

在这里插入图片描述

二、setup()函数的使用

2.1setup()函数的基础概念

Vue3 中的 setup() 是 Vue3 新增的组件配置项,用于替代 Vue2 中的 data()、methods()、computed() 等配置项。setup() 提供了更简洁的编写方式,且能够更好地利用 Vue3 提供的 Composition API。setup() 函数接受两个参数,分别是 props 和 context。其中,props 是组件接收的属性值,context 包含了一些组件的配置信息。

1.是什么:setup 是 Vue3 中新增的组件配置项,作为组合 API 的入口函数。

2.执行时机:实例创建前调用,甚至早于 Vue2 中的 beforeCreate。

3.注意点:由于执行 setup 的时候实例还没有 created,所以在 setup 中是不能直接使用 data 和 methods 中的数据的,所以 Vue3 setup 中的 this 也被绑定为了 undefined。

虽然 Vue2 中的 data 和 methods 配置项虽然在 Vue3 中也能使用,但不建议了,建议数据和方法都写在 setup 函数中,并通过 return 进行返回可在模版中直接使用(一般情况下 setup 不能为异步函数)。

2.2.setup()初体验

App.vue

    

{{ msg }}

export default { setup() { const msg = 'Hello Vue3' const say = () => { console.log(msg) } return { msg, say } }, }

登录后复制

效果查看:

初体验

注意:酷似于vue2中的data()与methods都是需要写在return才可作为结果进行调用。

【小小面试题补充】setup 中 return 的一定只能是一个对象吗?(setup 也可以返回一个渲染函数)

App.vue

    import { h } from 'vue'    export default {        name: 'App',        setup() {            return () => h('h2', 'Hello Vue3')        },    }

登录后复制

控制台则是打印出了h2标签的Hello Vue3。

2.3.reactive()函数

使用 reactive 函数包装数组为响应式数据。reactive 是一个函数,用来将普通对象/数组包装成响应式式数据使用,无法直接处理基本数据类型(因为它是基于 Proxy 的,而 Proxy 只能代理的是对象)。

比如当我有一个需求:点击删除当前行信息 App.vue

    
            
  • {{ item }}
  •     
export default { name: 'App', setup() { const arr = ['a', 'b', 'c'] const removeItem = (index) => { arr.splice(index, 1) } return { arr, removeItem, } }, }

登录后复制

通过vueTools查看,我点击过后数据是被删除了,但页面上并没有事实的渲染出来

在这里插入图片描述
此时,使用 reactive()包装数组使变成响应式数据,别忘了导入

    
            
  • {{ item }}
  •     
import { reactive } from 'vue' export default { name: 'App', setup() { const arr = reactive(['a', 'b', 'c']) const removeItem = (index) => { arr.splice(index, 1) } return { arr, removeItem, } }, }

登录后复制

此刻具有响应式
此刻页面也就具有了响应式,点击时删除,页面则是响应式的

同理:我们用reactive()来包裹我们的对象来使用

                                    
            
  • {{ item.name }}
  •     
import { reactive } from 'vue' export default { name: 'App', setup() { const state = reactive({ arr: [ { id: 0, name: 'ifer', }, { id: 1, name: 'elser', }, { id: 2, name: 'xxx', }, ], }) const removeItem = (index) => { // 默认是递归监听的,对象里面任何一个数据的变化都是响应式的 state.arr.splice(index, 1) } const user = reactive({ id: '', name: '', }) const handleSubmit = () => { state.arr.push({ id: user.id, name: user.name, }) user.id = '' user.name = '' } return { state, removeItem, user, handleSubmit, } }, }

登录后复制

运行效果

上述代码的解意:

我定义了输入框,定义了删除、添加事件的操作,通过v-model打到双向绑定数据来完成对我的数据进行增加与删除。
到目前你是不是对setup()的使用有了更加清晰的认识呢?下面再来简化一下我们的写法。

2.3.1reactive()的进一步抽离

优化:将同一功能的数据和业务逻辑抽离为一个函数,代码更易读,更容易复用。

                                    
            
  • {{ item.name }}
  •     
import { reactive } from 'vue' function useRemoveItem() { const state = reactive({ arr: [ { id: 0, name: 'ifer', }, { id: 1, name: 'elser', }, { id: 2, name: 'xxx', }, ], }) const removeItem = (index) => { state.arr.splice(index, 1) } return { state, removeItem } } function useAddItem(state) { const user = reactive({ id: '', name: '', }) const handleSubmit = () => { state.arr.push({ id: user.id, name: user.name, }) user.id = '' user.name = '' } return { user, handleSubmit, } } export default { name: 'App', setup() { const { state, removeItem } = useRemoveItem() const { user, handleSubmit } = useAddItem(state) return { state, removeItem, user, handleSubmit, } }, }

登录后复制

将方法抽离出来,用类似于导入的方式进行一个抽离,将数据与方法放在一起,便于我们的统一管理。

2.3.2reactive()再进行进一步文件拆分并且引入

两个文件总览

App.vue

                        
          
  • {{ item.name }}
  •   
import {useRemoveItem,handleSubmit} from './hooks' export default { name: 'App', setup() { const { state, removeItem } = useRemoveItem() const { user, submit } = handleSubmit(state) return { state,removeItem,user,submit } }, }

登录后复制

hooks/index.js

import { reactive } from 'vue'export const useRemoveItem=()=> {  const state= reactive( {          arr: [                    {                        id: 0,                        name: 'ifer',                    },                    {                        id: 1,                        name: 'elser',                    },                    {                        id: 2,                        name: 'xxx',                    },                ]              })  const removeItem=(index)=>{      state.arr.splice(index,1)            console.log(state.arr);          }      return { state, removeItem }}export const handleSubmit=(state)=>{  const user = reactive({                id: '',                name: '',            })            console.log(1);  const submit = () => {       state.arr.push({        ...user       })       user.id = ''       user.name = ''            }      return { user, submit }}

登录后复制

(学习视频分享:vuejs入门教程、一、组合式API对比vue2项目结构

在vue2当中

1.优点:易于学习和使用,写代码的位置已经约定好。

2.缺点:对于大型项目,不利于代码的复用、不利于管理和维护。

立即学习“前端免费学习笔记(深入)”;

3.解释:同一功能的数据和业务逻辑分散在同一个文件的 N 个地方,随着业务复杂度的上升,我们需要经常在类似于data()以及methods中进行来回的处理

在vue3当中

1.优点:可以把同一功能的数据和业务逻辑组织到一起,方便复用和维护。

2.缺点:需要有良好的代码组织和拆分能力,相对没有 Vue2 容易上手。

3.解释:注意:为了能让大家较好的过渡到 Vue3.0 版本,目前也是支持 Vue2.x 选项 API 的写法。

以上就是浅析vue3中setup()和reactive()函数的使用的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3230497.html

(0)
上一篇 2025年4月1日 16:37:27
下一篇 2025年2月23日 14:59:11

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 一起学学vue的mixin

    前言 如果你在写vue组件时,发现有几个组件的逻辑差不多类似,那么你就可以使用vue的mixin(混入),把类似的逻辑抽离出来封装成js,然后在各个组件引入使用。 mixin就是用来解决vue组件逻辑复用的问题。今天咱们来学学vue的mix…

    2025年4月1日
    100
  • vue3组件间怎么通信?通信方式浅析

    在我们写 vue3 的项目中,我们都会进行组件通信,我们除了使用 pinia 公共数据源的方式除外,我们还可采用那些更简单的api方法呢?那下面我就来给大家介绍介绍几种父子组件和子父组件通信的方式。 1、父子组件通信 1.1 defineP…

    2025年4月1日 编程技术
    100
  • 一文详解Vue 3中的的插件

    当今 vue.js 已经成为了前端框架的主流之一,随着 vue.js 的不断发展,插件 (plugin) 已经成为了 vue.js 中的一个重要组成部分。在 vue.js 3.x 版本中,插件已经成为了 vue.js 的默认行为,因此熟练使…

    2025年4月1日
    100
  • 图文详解如何在Vue项目中集成Ace代码编辑器

    前言 在集成Ace过程中发现网上搜到资料比较零碎,且中文资料比较少,本文主要做一些记录和整理,方便后续查阅在Vue项目中集成Ace代码编辑器Ace配置项的中文对照踩坑:解决Ace editor 光标错位问题优化:按需使用ace-builds…

    2025年4月1日 编程技术
    100
  • 一步步带你分析vue文件中的ts代码

    我们知道vue文件是由’template’、’script’、’style’三种类型代码组合成的。如果要分析标签内的ts代码,要怎么做呢? 1.第一步: 通过@vue/…

    2025年4月1日 编程技术
    100
  • 探讨如何在Vue3中编写单元测试

    当今前端开发中,vue.js 已经成为了一个非常流行的框架。随着 vue.js 的不断发展,单元测试变得越来越重要。今天,我们将探讨如何在 vue.js 3 中编写单元测试,并提供一些最佳实践和常见的问题及解决方案。 一、为什么要进行单元测…

    2025年4月1日
    100
  • Vue3中的模板语法和vue指令怎么使用

    1 模板插值语法 在script 声明一个变量可以直接在template 使用用法为{{变量名称}} 模板语法是可以编写条件运算的 运算也是支持的 操作API 也是支持的   {{ message }}    {{ message2==0 …

    编程技术 2025年4月1日
    100
  • Vue最全学习资料汇总:文献、文档、博客、视频等

    vue是一款非常流行的javascript框架,它采用了mvvm模式,同时具有轻量、简单易学、高效等特点,深受前端开发者的喜爱。如果你也想学习vue,那么本文将为您提供一些最全的学习资料,帮助您快速入门。 Vue官方文献 Vue官方文献包括…

    编程技术 2025年4月1日
    100
  • 使用Vue2.0实现购物车购买的完整指南

    购物车购买是现代电商网站中最重要的功能之一,其完成贯穿了整个购物流程。vue2.0是一种流行的javascript框架,它提供了许多便于开发购物车的工具。本篇文章将为您提供一份完整的使用vue2.0实现购物车购买的指南。 创建购物车对象 首…

    编程技术 2025年4月1日
    100
  • Vue中常见问题解答及使用技巧总结

    vue.js是一种前端框架,其最大的优势就是其响应式的数据绑定机制和简洁优雅的api设计,这也是其被广泛使用的原因之一。随着vue的普及,开发者们也遇到了一些问题和挑战。下面我们就来总结一下vue中常见问题及使用技巧。 一、常见问题解答 如…

    编程技术 2025年4月1日
    100

发表回复

登录后才能评论