Vue的项目创建以及项目目录与组合式API

news2025/2/27 0:17:08

一.创建Vue

1.Vue-CLI:创建Vue的脚手架工具

2.Create-vue:是Vue官方提供的脚手架之一,底层采用官方自主研发的vite,快捷,开发方便。

3.准备工作:系统中需要安装nodejs环境,在该环境中提供npm包管理器

4.创建Vue项目的命令:npm init vue@latest

5.切换至新建的项目目录下:cd vue-demol1

6.安装项目的基础依赖:npm install

7.需要注意的是:npm安装比较慢时,需要将npm镜像地切换至国内镜像,参考API

8.启动项目:npm run dev

9.默认访问界面

二.项目目录

node_models:包管理器

main.js:入口文件

index.html:挂载文件

app.vue:根组件

        <script></script>

        <template></template>

        <style></style>

vite.config.js:项目配置文件,基于vite的配置

packege.json:项目的包文件,包含启动信息,依赖版本配置

三.组合式API

将项目中需要核心API进行封装,提供setup的语法糖

通常情况下:组合式API的优先级最高

setup选项的执行时机?

在组件加载时最先执行,优先级高于钩子函数beforeCreate()

setup写代码的特点是什么?

定义数据+函数

setup中this是否还指向组件实例?

this默认情况下指向undefined

3.2reactive和ref函数

实现双向数据绑定(响应式数据)的组合式api

3.2.1.reactive

接收对象类型数据参数,返回响应式对象

如何使用:

  1. 导入reactive
  2. 使用reactive函数

优点:语法清晰,使用简单

缺点:只支持对象类型的数据

3.2.2.ref

接受简单数据或者对象数据类型参数,返回响应式对象

如何使用:

  1. 导入ref
  2. 使用ref函数

优点:支持多种数据类型,页面元素中可以直接使用引用名

缺点:脚本中需要通过value属性控制数据

reactive和ref函数的共同作用是什么?

用函数调用的发式生成响应式数据,实现双向数据绑定

reactive和ref对比谁更好?

reactive不能处理简单类型数据

ref支持更多种数据类型,需要通过value属性操作数据

ref内部是依赖reactive

3.3computed

计算属性:实现的功能与Vue2的语法一致,在Vue3中只是改变语法结构

如何使用:

  1. 导入computed
  2. 执行函数完成计算过程

计算属性的缺点?

计算属性在异步请求中会出现数据不匹配的情况

计算属性的特点?

计算属性用于进行运算,避免直接修改值

3.4Watch

watch函数用于监听数据变化,可以侦听一个或多个的变化

函数参数:newVal新数据。oldVal旧数据。Immediate(立即执行),deep深度侦听

如何使用:

  1. 导入函数
  2. 调用执行函数

作为函数的第一个参数,ref对象需要通过value获取值吗?

不需要,watch会自动读取

Watch能侦听什么样的数据?

单个或多个数据

不开启deep,直接修改对象中的属性值会触发回调函数吗?

不会,默认浅层监听

不开启deep,需要侦听对象中的某一个属性,怎么执行回调函数?

将第一个参数传入函数,返回需要监听的属性

3.5.生命周期函数

在组件的初始化,挂载,元素加载前,更新,销毁等环节自动调用的回调函数

选项式API(Vue2)

组合式API(Vue3)

beforeCreate/created

setup

beforeMount

onBeforeMount

mounted

onmounted

beforeUpdate

onBeforeUpdate

updated

onUpdated

beforeUnmount

onBeforeUnmount

unmounted

onUnmounted

如何使用:

  1. 调用工具
  2. 使用函数

组合式API中的生命周期函数语法格式是什么?

可以像调用函数一样去使用。on+生命周期的名字

在组合式API中如何调用onCreated函数?

在组合式API中没有onCreated函数,已经集成到setup中了

beforeCreate与setup谁的优先级更高?

setup优先级更高

组合式API中,组件卸载完毕调用哪一个钩子函数?

onUnmounted

钩子(hook)函数是处理拦截在软件组件之间传递的函数调用、事件或消息的代码,本质上是用以处理系统消息的程序,通过系统调用将其挂入系统中。

四.调用setup

1.App.vue里面的<script></script>中

console.log('调用了setup')
      const message="今天天气不错";
      const logMessage=()=>{
        console.log(message)
      }

在template中写

{{ message }}
    <button @click="logMessage">gotoLog</button>

2.使用reactive

在App.vue文件中的<script></script>中

import { reactive,ref } from 'vue'; 
     
    const state=reactive({count:0})
    const setCount=()=>{
      state.count++
    }

在template中写

<button @click="setCount">{{ state.count }}</button>

3.computed计算属性

const count=ref(0)
    const setCount=()=>{
      count.value++//ref会将值存放在value属性中,通过调用该属性获取数据
    }
<button @click="setCount">{{ count}}</button>
<script setup>
//export default{
  // setup(){
    //   console.log('调用了setup')
    //   const message="今天天气不错";
    //   const logMessage=()=>{
    //     console.log(message)
    //   }
    //   return{
    //     message,
    //     logMessage
    //   }
    // },
  //}  
    

    
      // console.log('调用了setup')
      // const message="今天天气不错";
      // const logMessage=()=>{
      //   console.log(message)
      // }
      //使用reactive()
     import { reactive,ref } from 'vue'; 
     
    // const state=reactive({count:0})
    // const setCount=()=>{
    //   state.count++
    // }
    //computed计算属性
    // const count=ref(0)
    // const setCount=()=>{
    //   count.value++//ref会将值存放在value属性中,通过调用该属性获取数据
    // }
    // import { computed } from 'vue';
    // const list=ref([1,2,3,4,5,6,7,8,9])
    // const computedList=computed(()=>{
    //   return list.value.filter(item=>item>2)
    // })
    // //3秒之后源list中的值增加
    // setTimeout(()=>{
    //   list.value.push(10,11)
    // },3000)
    //watch侦听属性
    // import { watch } from 'vue';
    // const count=ref(0)
    // const setCount=()=>{
    //   count.value++
    // }
    // const username=ref('wahaha')
    // const setUsername=()=>{
    //   username.value='zhangsan'
    // }
    //侦听一个数
    // watch(count,(newVal,oldVal)=>{
    //   console.log('count变化了',newVal,oldVal)
    // })
    //侦听多个数据
    //参数1:数组,侦听多个数据
    //参数2的参数1:新值
    //参数2的参数2:旧值
    // watch([count,username],([newVal,newVal1],[oldVal,oldVal1])=>{
    //    console.log('count变化了',[newVal,newVal1],[oldVal,oldVal1])
    //  })
    //立即侦听,页面渲染完毕,先执行一次侦听动作
  // import {ref,watch} from 'vue'
  // const count=ref(0)
  // const setCount=()=>{
  //   count.value++
  // }
  // watch(count,()=>{
  //   console.log('count值变化了')
  // },{immediate:true})
  //深度侦听
    // import {ref,watch} from 'vue'
    // const state=ref({count:0})
    // const setStateByCount=()=>{
    //   state.value.count++
    // }
    // watch(state,()=>{
    //   console.log('state中的count值变化了')
    // },{
    //   deep:true
    // })
  //深度侦听对象数据中某一个属性(精确侦听)
  // import {ref,watch} from 'vue'
  // const info=ref({
  //   username:'wahaha',
  //   age:18
  // })
  // const setInfoByName=()=>{
  //   info.value.username='张三'
  // }
  // const setInfoByAge=()=>{
  //   info.value.age=28
  // }
  // watch(()=>
  //   info.value.age
  // ,()=>{
  //   console.log('age变化了')
  // })
  //生命周期函数
  // import { onMounted } from 'vue';

  // onMounted(()=>{
  //   console.log('元素加载完毕执行了mounted函数1')
  // })
  // onMounted(()=>{
  //   console.log('元素加载完毕执行了mounted函数2')
  // })
</script>

<template>
  this is div
  <div>
    <!-- {{ message }}
    <button @click="logMessage">gotoLog</button> -->
    <!-- <button @click="setCount">{{ state.count }}</button> -->
    <!-- <button @click="setCount">{{ count}}</button> -->
     <!-- 原值{{ list }}
    计算属性返回值{{ computedList }} -->
    <!-- <button @click="setCount">{{ count}}</button> -->
    <!-- <button @click="setUsername">{{ username}}</button> -->
    <!-- <button @click="setCount">{{ count}}</button> -->
     <!-- {{ state.count }}
    <button @click="setStateByCount">修改state中的count值</button> -->
    <!-- {{ info.username }}
    {{ info.age }}
    <button @click="setInfoByName">修改姓名</button>
    <button @click="setInfoByAge">修改年龄</button> -->
  </div>
</template>

<style scoped>

</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2306611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习笔记】计算机网络(四)

第4章 网络层 文章目录 第4章 网络层4.1 网络层的几个重要概念4.1.1 网络层提供的两种服务虚电路服务&#xff08;Virtual Circuit Service&#xff09;数据报服务&#xff08;Datagram Service&#xff09; 4.1.2 网络层的两个层面 4.2 网际协议 IP - IPv44.2.1 虚拟互连网络4…

DeepSeek-R1:通过强化学习激励大语言模型的推理能力

摘要 本文介绍了我们的第一代推理模型&#xff0c;DeepSeek-R1-Zero 和 DeepSeek-R1。DeepSeek-R1-Zero 是通过大规 模强化学习&#xff08;RL&#xff09;训练的模型&#xff0c;在没有使用监督微调&#xff08;SFT&#xff09;这个前置步骤的情况下&#xff0c;展示了卓越的推…

洛谷 P8705:[蓝桥杯 2020 省 B1] 填空题之“试题 E :矩阵” ← 卡特兰数

【题目来源】 https://www.luogu.com.cn/problem/P8705 【题目描述】 把 1∼2020 放在 21010 的矩阵里。要求同一行中右边的比左边大&#xff0c;同一列中下边的比上边的大。一共有多少种方案? 答案很大&#xff0c;你只需要给出方案数除以 2020 的余数即可。 【答案提交】 …

【无标题】网络安全公钥密码体制

第一节 网络安全 概述 一、基本概念 网络安全通信所需要的基本属性“ 机密性&#xff1b;消息完整性&#xff1b;可访问性与可用性&#xff1b;身份认证。 二、网络安全威胁 窃听&#xff1b;插入&#xff1b;假冒&#xff1b;劫持&#xff1b;拒绝服务Dos和分布式拒绝服务…

【含开题报告+文档+PPT+源码】基于SpringBoot的进销存管理系统的设计与实现

开题报告 本文提出并研发了一款基于Spring Boot框架构建的进销存管理系统&#xff0c;该系统集成了全方位的企业运营管理功能&#xff0c;涵盖了用户登录验证、系统公告管理、员工信息与权限管理、物料全流程&#xff08;采购入库、销售出库、退货处理&#xff09;控制、部门组…

Linux-SaltStack配置

文章目录 SaltStack配置 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Linux专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2025年02月24日20点51分 SaltStack配置 SaltStack 中既支持SSH协议也支持我们的一个客户端 #获取公钥&#xff08;…

事务的4个特性和4个隔离级别

事务的4个特性和4个隔离级别 1. 什么是事务2. 事务的ACID特性2.1 原子性2.2 一致性2.3 持久性2.4 隔离性 3. 事务的创建4. 事务并发时出现的问题4.1 DIRTY READ 脏读4.2 NON - REPEATABLR READ 不可重复读4.3 PHANTOM READ 幻读 5. 事务的隔离级别5.1 READ UNCOMMITTED 读未提交…

对计算机中缓存的理解和使用Redis作为缓存

使用Redis作为缓存缓存例子缓存的引入 Redis缓存的实现 使用Redis作为缓存 缓存 ​什么是缓存&#xff0c;第一次接触这个东西是在考研学习408的时候&#xff0c;计算机组成原理里面学习到Cache缓存&#xff0c;用于降低由于内存和CPU的速度的差异带来的延迟。它是在CPU和内存…

SOME/IP-SD -- 协议英文原文讲解5

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.2.5 S…

lowagie(itext)老版本手绘PDF,包含页码、水印、图片、复选框、复杂行列合并等。

入口类&#xff1a;exportPdf ​ package xcsy.qms.webapi.service;import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.utils.StringUtils; import com.ibm.icu.text.RuleBasedNumberFormat; import com.lowa…

达梦有没有类似oerr的功能

在oracle 23ai的sqlplus中&#xff0c;直接看异常信息说明&#xff1a; 达梦没有此功能&#xff0c;但是可以造一个 cd /home/dmdba cat >err.sql<<eof set echo off set ver off set timing off set lineshow off set feedback off select * from V\$ERR_INFO wher…

实战-网安

面试感受:网安公司前端实习 今天我有幸面试了一家网络安全公司的前端开发实习岗位,整个过程让我受益匪浅,也让我对未来的职业发展有了更清晰的认识。 首先,面试官非常专业且友好,整个面试氛围轻松但不失严谨。面试一开始,面试官简单介绍了公司背景和团队文化,让我对公…

MybatisPlus-扩展功能-枚举处理器

在Mybatis里有一个叫TypeHandler的类型处理器&#xff0c;我们常见的PO当中的这些成员变量的数据类型&#xff0c;它都有对应的处理器&#xff0c;因此它就能自动实现这些Java数据类型与数据库类型的相互转换。 它里面还有一个叫EnumOrdinalTypeHandler的枚举处理器&#xff0…

力扣2454. 下一个更大元素 IV

力扣2454. 下一个更大元素 IV 题目 题目解析及思路 题目要求对于每个数&#xff0c;找到右边比它大的第二个数&#xff0c;并记录在ans数组中 如果是右边第一个大的&#xff0c;就用一个递减栈即可&#xff0c;栈顶元素如果<当前元素则弹出 第二个大数就要利用弹出的栈顶…

unity学习51:所有UI的父物体:canvas画布

目录 1 下载资源 1.1 在window / Asset store下下载一套免费的UI资源 1.2 下载&#xff0c;导入import 1.3 导入后在 project / Asset下面可以看到 2 画布canvas&#xff0c;UI的父物体 2.1 创建canvas 2.1.1 画布的下面是 event system是UI相关的事件系统 2.2 canvas…

Ollama部署与常用命令

Ollama是一款开源工具&#xff0c;其目标是简化大语言模型在本地环境的部署和使用。它支持多种流行的开源大语言模型&#xff0c;如 Llama 2、Qwen2.5等。 通过Ollama&#xff0c;用户无需具备深厚的技术背景&#xff0c;就能在普通的消费级硬件上快速搭建一个强大的语言处理环…

Visual Studio Code 远程开发方法

方法1 共享屏幕远程控制&#xff0c;如 to desk, 向日葵 &#xff0c;像素太差&#xff0c;放弃 方法2 内网穿透 ssh 第二个方法又很麻烦&#xff0c;尤其是对于 windows 电脑&#xff0c;要使用 ssh 还需要额外安装杂七杂八的东西&#xff1b;并且内网穿透服务提供商提供的…

C语言预编译

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文一、预处理的作用与流程&#xf…

汽车智能制造企业数字化转型SAP解决方案总结

一、项目实施概述 项目阶段划分&#xff1a; 蓝图设计阶段主数据管理方案各模块蓝图设计方案下一阶段工作计划 关键里程碑&#xff1a; 2022年6月6日&#xff1a;项目启动会2022年12月1日&#xff1a;系统上线 二、总体目标 通过SAP实施&#xff0c;构建研产供销协同、业财一…

flowable-ui 的会签功能实现

场景&#xff1a;在进行智慧保时通开发时&#xff0c;有个协作合同入围功能&#xff0c;这个功能的流程图里有个评审小组&#xff0c;这个评审小组就需要进行会签操作&#xff0c;会签完成后&#xff0c;需要依据是否有不通过的情况选择下一步走的流程 思考步骤&#xff1a; 首…