【vue3语法】开发使用创建项目等

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、vue3
      • 创建vue3
      • v2函数式、v3组合式api
      • 响应式方法ref、reactive
      • 计算属性conputed
      • 监听属性wacth
      • vue3 选项式生命周期
      • 父子通信
        • 父传子
          • defineProps编译宏
        • 子传父
          • defineEmits方法
        • 获取DOM ref
          • defineExpose
      • 跨组件通信 provied & inject
      • vue3一些定义define
        • 1、defineOptions 可以声明和setup平级的
        • 2、 defineExpose 暴露当前组件方法和函数
        • 3、 defineEmits 子父通信
        • 4、 defineProps 父子通信
        • 5、 defineModel
  • 二、Pinia
      • 安装Pinia,及使用
  • 总结


前言

一、vue3

创建vue3

npm init vue@latest

在这里插入图片描述

v2函数式、v3组合式api

函数式
在这里插入图片描述
组合式
>在这里插入图片描述

响应式方法ref、reactive

ref script里面使用要.value 简单类型或复杂类型
reactive 复杂类型

<script setup>
import { ref,reactive } from "vue"
const a = ref(0)
console.log(a.value) // 0
const clicks=()=>{
a.value++
}const b = reactive({
color:"1234"
})</script>
<template>
<div>
{{a}}
<button @click=”clicks“></button>
</div>
</template>

在这里插入图片描述

计算属性conputed

conputed 计算属性应该只包含计算逻辑
避免直接修改计算属性的值
支持get,set

<script setup>
import { ref,conputed } from "vue"
const list = ref([1,2,3,4,5,6,7,8,9])const a = conputed(()=>{return list.value.filter((item)=>{return item>3}) 
}) // a 为[4,5,6,7,8,9]
</script>

监听属性wacth

wacth 支持浅监听、深度监听

<script>
const s =ref(0)
// 浅监听
const a = wacth([s]/**[s] //监听数组s  //监听单个属性()=>s.age //监听复杂类型里的单个属性*/,(newValue,oldValue)=>{
})// 深度监听
const a = wacth([s]/**s 可写数组和监听单个*/,(newValue,oldValue)=>{
}{
deep:true;//深度监听 复杂数据等等
immediate:true //页面加载时执行一次
})
<?script>

在这里插入图片描述### 生命周期

vue3 选项式生命周期

beforeCreate/created 变成setup
beforeUnmount/Unmounted
其他与v2一样

组合式api
setup 初始化
其他在选项是前加on

<script setup></script>

在这里插入图片描述

父子通信

父传子

父":"动态声明,子defineProps接收

defineProps编译宏
<template>
<Bate mesage="子"></Bate>//子组件
</template>
<script>
const a = defineProps({
mesage:"123"
})
</script>

在这里插入图片描述

子传父

emit传递,@接收

defineEmits方法
<template>
<Bate @changes="(e)=>{console.log(e);/**e为5*/}"></Bate>//子组件
</template>
<script>
const emit = defineEmits(['changes'])//声明
const a = ()=>{
emit('changes',5)传递
}
</script>

在这里插入图片描述在这里插入图片描述

获取DOM ref

ref 获取DOM
ref 获取组件 需要暴露组件内部方法,默认不暴露
ref 声明响应式数据

defineExpose

暴露setup方法可以在父组件访问

<script setup>
import {ref} from "vue"
const inp =ref(null)
onMounted(()=>{
console.log(inp.value)
})
defineExpose({
inp,
})
</script>
<template>
<input type="text"/ ref="inp">//绑定ref
</template>

在这里插入图片描述

跨组件通信 provied & inject

顶层组件

const key= '123'
provied('key', key)

在这里插入图片描述

底层组件

const key= inject('key')
console.log(key)// 返回值123

在这里插入图片描述

vue3一些定义define

1、defineOptions 可以声明和setup平级的

在这里插入图片描述

2、 defineExpose 暴露当前组件方法和函数
<script>
defineExpose({
inp,
})
</script>
3、 defineEmits 子父通信
<script>
const emit = defineEmits(['changes'])//声明
const a = ()=>{
emit('changes',5)传递
}
</script>
4、 defineProps 父子通信
<script>
const a = defineProps({
mesage:"123"
})
</script>
5、 defineModel

动态显示父子传值
实验性质的宏

使用v-model需要父传子,然后监听修改值
在这里插入图片描述在这里插入图片描述

defineModel的写法
v-model 父组件传值,
在这里插入图片描述

在这里插入图片描述
启动defineModel,重新运行项目
在这里插入图片描述

二、Pinia

安装Pinia,及使用

npm init vue@latest 创建vue项目可选Pinia直接安装好
npm install pinia

  • main.ts
import { createApp } from 'vue'
import './style.scss'
import App from './App.vue'
import router from './router'
import pinia from './store'
// import 'element-plus/dist/index.css'
createApp(App).use(router).use(pinia).mount('#app')
  • src下创建store/index.ts
import { createPinia } from 'pinia'
// * pinia持久化数据,可以将 pinia 的状态持久化到本地存储中,以便在页面刷新或重新加载后保持状态的一致性。
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'// 引入自定方法
import userAppStrote from './user/index'
export { userAppStrote }const pinia = createPinia()// 注册持久化插件
pinia.use(piniaPluginPersistedstate)export default pinia
  • 创建store/user/index.ts
  • 声明方法等,persist: true 开启持久化
import { defineStore } from 'pinia'
import { userTpye } from './types'
import { productType } from '@/api'
const userAppStrote = defineStore('useAppStrote',(): userTpye => {// 产品类型const ProductType = ref('2')productType().then((res: any) => {ProductType.value = res.data.ProductType})// 防抖var timer: any = nullconst AntiShake = (request: any, params: object, time: number) => {return new Promise(async r => {if (timer == null) {timer = setTimeout(() => {request(params).then((res: any) => {timer = nullr(res)})}, time * 1000)} else {r(false)}})}return {ProductType,productType,timer,AntiShake,}},{persist: true, // 开起持久化}
)export default userAppStrote
  • 创建store/user/type.ts 类型定义
// 类型定义
export interface userTpye {ProductType: Ref<string>productType: () => Promise<unknown>timer: anyAntiShake: (arg0: any, arg1: object, arg3: number) => Promise<unknown>
}
  • 使用pinia
  • userStrote或使用storeToRefs解构
import { userAppStrote } from '@/store'
import { storeToRefs } from 'pinia'
const userStrote = userAppStrote()
// userStrote.ProductType
const rouer = useRouter()
const { ProductType } = storeToRefs(userStrote)console.log(ProductType)

总结

vue语法,以及基本配置

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

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

相关文章

大学生考勤新趋势:技术驱动,数据说话

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

老隋蓝海项目temu跨境电商好不好做?

近年来&#xff0c;跨境电商成为我国对外贸易的新亮点&#xff0c;其中Temu作为拼多多旗下的新兴跨境电商平台&#xff0c;吸引了众多国内卖家参与。老隋作为行业内的知名人士&#xff0c;他对Temu跨境电商项目的评价备受关注。本文将分析老隋对Temu跨境电商的看法&#xff0c;…

[数据集][目标检测]游泳者溺水数据集VOC+YOLO格式2类别895张

数据集制作单位&#xff1a;未来自主研究中心(FIRC) 数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;895 标注数量(xml文件个数)&#xff1a…

9个最受欢迎的开源自动化测试框架盘点!

自动化测试框架可以帮助测试人员评估多个Web和移动应用程序的功能&#xff0c;安全性&#xff0c;可用性和可访问性。尽管团队可以自己构建复杂的自动化测试框架&#xff0c;但是当他们可以使用现有的开源工具&#xff0c;库和测试框架获得相同甚至更好的结果时&#xff0c;通常…

NGINX服务器配置实现加密的WebSocket连接WSS协议

一、背景 最近在做小程序开发&#xff0c;需要在nginx中配置websocket加密模式&#xff0c;即wss。初次配置wss时&#xff0c;踩了两个小时的坑&#xff0c;本文将踩坑过程分享给大家&#xff0c;有需要用到的伙伴可以直接copy即可实现&#xff0c;节省宝贵时间。 二、WebSo…

1、权限维持域控后门SSP

用途&#xff1a;个人学习笔记&#xff0c;有所借鉴&#xff0c;欢迎指正&#xff01; 欢迎新朋友 前言&#xff1a; 很多时候拿下了一台服务器权限后&#xff0c;可能过几天就会无法控制&#xff0c;因为企业都会有专业人士定期查杀后门、…

HDL FPGA 学习 - Avlon 总线,从端口传输、主端口传输,单周期、可变周期传输

目录 1.1 Avlon 总线 定制 外设 IP 核的框架 从端口传输 从端口信号类型 从端口传输模式列举 基本单周期读写传输 固定等待周期的读写传输 可变等待周期的读写传输&#xff08;推荐&#xff09; 具有建立时间和保持时间读写传输 主端口传输 主端口信号类型 主端口传…

通信入门系列——双边带信号、单边带信号、Hilbert变换

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、双边带信号 二、单边…

flink sql 实战实例 及延伸问题:聚合/数据倾斜/DAU/Hive流批一体 等

flink sql 实战实例 及延伸问题 Flink SQL 计算用户分布Flink SQL 计算 DAU多topic 数据更新mysql topic接入mysql引入 upsert-kafka-connector 以1.14.4版本为例 数据倾斜问题&#xff1a;让你使用用户心跳日志&#xff08;20s 上报一次&#xff09;计算同时在线用户、DAU 指标…

1 easy 88. 合并两个有序数组

方法1: Arrays.sort //给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 // // 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 // // 注意&am…

Linux环境下C语言实现ping命令

Linux环境下C语言实现ping命令 涉及的知识点 Linux信号量的使用 SIGALRM信号是操作系统中的其中一个信号。他的作用是设置进程隔多久后会收到一个SIGALRM信号 #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <signal.h> …

SSM---Mybatis查询数据库的功能

Mybatis查询数据库的功能流程&#xff1a; 在maven中加入mybatis依赖&#xff0c;mysql驱动依赖创建一张student表创建表对应的实体类&#xff1a;student类&#xff0c;用来保存表中的每行数据创建持久层的DAO接口&#xff0c;用来定义操作数据库的方法创建这个表对应的sql映…

前端发送请求,明明登录进去了,为什么获取用户信息不行,后端总是识别不到token——跨域的问题

跨域问题 今天在对接前后端的时候&#xff0c;发现明明系统的登录接口都是好的&#xff0c;但是偏偏就是获取不到用户的信息&#xff0c;后端总是报错说读取不到有效的token。 总是说请求头中读取的token是null 在经过不断的排查和上网需求帮助的时候&#xff0c;我总结了以下…

JavaWeb——007MYSQL(DQL多表设计)

# 数据库开发-MySQL 一级目录二级目录三级目录 1. 数据库操作-DQL1.1 介绍1.2 语法1.3 基本查询1.4 条件查询1.5 聚合函数1.6 分组查询1.7 排序查询1.8 分页查询1.9 案例1.9.1 案例一1.9.2 案例二 2. 多表设计2.1 一对多2.1.1 表设计2.1.2 外键约束 2.2 一对一2.3 多对多2.4 案…

ROS2高效学习第四章 -- ros2 topic 编程之自定义 msg

ros2 topic 编程之自定义 msg 1 前言和资料2 正文2.1 两种自定义 msg 方式的讨论2.2 自定义 msg 独立存在2.2.1 自定义 msg 包&#xff08;diy_interface&#xff09;2.2.2 pubsub_cpp 收发自定义 msg2.2.3 pubsub_py 收发自定义 msg 2.3 自定义 msg 放在模块包里&#xff08;p…

逻辑思维1000题丨【Exercise 1】解析

目录 声明 解析 声明 解析网上是搜不到的&#xff0c;100%原创。本专栏只会讲解重难点题目&#xff0c;简单题目不做讲解。 解析 2.What is the missing number? 1 12 13 124 15 1236 17 1248 139 12510 111 1234612 113 12714 13515 &#xff1f; 观察每个数字的末尾分别是…

Redis高并发分布锁实战

Redis高并发分布锁实战 问题场景 场景一: 没有捕获异常 // 仅仅加锁 // 读取 stock15 Boolean ret stringRedisTemplate.opsForValue().setIfAbsent("lock_key", "1"); // jedis.setnx(k,v) // TODO 业务代码 stock-- stringRedisTemplate.delete(&quo…

HarmonyOS服务卡片开发指导(Stage模型)概述

服务卡片概述 服务卡片&#xff08;以下简称“卡片”&#xff09;是一种界面展示形式&#xff0c;可以将应用的重要信息或操作前置到卡片&#xff0c;以达到服务直达、减少体验层级的目的。卡片常用于嵌入到其他应用&#xff08;当前卡片使用方只支持系统应用&#xff0c;如桌…

Android Gradle 开发与应用 (一) : Gradle基础

1. Gradle是什么 Gradle是一个通用的构建工具&#xff0c;支持诸多主要的 IDE&#xff0c;包括 Android Studio、IntelliJ IDEA、Visual Studio 等 Gradle 的底层实现(核心引擎和框架)其实是用 Java 编写的开发者通常使用 Groovy 或 Kotlin 来编写构建脚本 1.1 那么为什么Gra…

你真的了解@Async吗?

你真的了解Async吗&#xff1f; 使用场景&#xff1a; 开发中会碰到一些耗时较长或者不需要立即得到执行结果的逻辑&#xff0c;比如消息推送、商品同步等都可以使用异步方法&#xff0c;这时我们可以用到Async。但是直接使用 Async 会有风险&#xff0c;当我们没有指定线程池…