【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 = null
    const AntiShake = (request: any, params: object, time: number) => {
      return new Promise(async r => {
        if (timer == null) {
          timer = setTimeout(() => {
            request(params).then((res: any) => {
              timer = null
              r(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: any
  AntiShake: (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语法,以及基本配置

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Typora结合PicGo + 使用Github搭建个人免费图床

文章目录 一、国内图床比较二、使用Github搭建图床三、PicGo整合Github图床1、下载并安装PicGo2、设置图床3、整合jsDelivr具体配置介绍 4、测试5、附录 四、Typora整合PicGo实现自动上传 每次写博客时&#xff0c;我都会习惯在Typora写好&#xff0c;然后再复制粘贴到对应的网…

2.23日学习总结

今天刚学的01背包&#xff0c;套模板就可以解决这道题。 #include<iostream> using namespace std; int n,m,f[13000],w[3410],v[3410]; int main() {cin>>n>>m;for(int i1;i<n;i)scanf("%d %d",&w[i],&v[i]);for(int i1;i<n;i)for…

第三节:Vben Admin登录对接后端login接口

系列文章目录 第一节&#xff1a;Vben Admin介绍和初次运行 第二节&#xff1a;Vben Admin 登录逻辑梳理和对接后端准备 文章目录 系列文章目录前言一、Flask项目介绍二、使用步骤1.User模型创建2.迁移模型3. Token创建4. 编写蓝图5. 注册蓝图 三. 测试登录总结 前言 上一节&…

1904_ARM Cortex M系列芯片特性小结

1904_ARM Cortex M系列芯片特性小结 全部学习汇总&#xff1a; g_arm_cores: ARM内核的学习笔记 (gitee.com) ARM Cortex M系列的MCU用过好几款了&#xff0c;也涉及到了不同的内核。不过&#xff0c;关于这些内核的基本的特性还是有些不了解。从ARM的官方网站上找来了一个对比…

皓学IT:WEB05-Servlet

一、Servlet 1.1.概述 Servlet是SUN公司提供的一套规范&#xff0c;名称就叫Servlet规范&#xff0c;它也是JavaEE规范之一。我们可以像学习Java基础一样&#xff0c;通过API来学习Servlet。这里需要注意的是&#xff0c;在我们之前JDK的API中是没有Servlet规范的相关内容&am…

k8s笔记26--快速实现prometheus监控harbor

k8s笔记26--快速实现prometheus监控harbor 简介采集指标&配置grafana面板采集指标配置grafana面板 说明 简介 harbor是当前最流行的开源容器镜像仓库项目&#xff0c;被大量IT团队广泛应用于生产、测试环境的项目中。本文基于Harbor、Prometheus、Grafana介绍快速实现监控…

H5多用途的产品介绍展示单页HTML5静态网页模板

H5多用途的产品介绍展示单页HTML5静态网页模板 源码介绍&#xff1a;一款H5自适应多用途的产品介绍展示单页HTML静态网页模板&#xff0c;可用于团队官网、产品官网。 下载地址&#xff1a; https://www.changyouzuhao.cn/13534.html

MYSQL安装及卸载

目录 一、下载 二、解压 三、配置 1. 添加环境变量 2. 初始化MySQL 3. 注册MySQL服务 4. 启动MySQL服务 5. 修改默认账户密码 四、登录MySQL 五、卸载MySQL 一、下载 点开下面的链接&#xff1a;MySQL :: Download MySQL Community Server 点击Download 就可以下载对…

vim恢复.swp [BJDCTF2020]Cookie is so stable1

打开题目 扫描目录得到 关于 .swp 文件 .swp 文件一般是 vim 编辑器在编辑文件时产生的&#xff0c;当用 vim 编辑器编辑文件时就会产生&#xff0c;正常退出时 .swp 文件被删除&#xff0c;但是如果直接叉掉&#xff08;非正常退出&#xff09;&#xff0c;那么 .swp 文件就会…

爬虫入门五(Scrapy架构流程介绍、Scrapy目录结构、Scrapy爬取和解析、Settings相关配置、持久化方案)

文章目录 一、Scrapy架构流程介绍二、Scrapy目录结构三、Scrapy爬取和解析Scrapy的一些命令css解析xpath解析 四、Settings相关配置提高爬取效率基础配置增加爬虫的爬取效率 五、持久化方案 一、Scrapy架构流程介绍 Scrapy一个开源和协作的框架&#xff0c;其最初是为了页面抓取…

基于springboot+vue的音乐网站(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

【其他】简易代码项目记录

1. KeypointDetection 1.1. CharPointDetection 识别字符中的俩个关键点。 1.2. Facial-keypoints-detection 用于检测人脸的68个关键点示例。 1.3. Hourglass-facekeypoints 使用基于论文Hourglass 的模型实现人体关键点检测。 1.4. Realtime-Action-Recognition containing:…

15.4K Star,超强在线编辑器

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 今天推荐一款非常棒的开源实时协作编辑器&#xff0c;可用于多人同时编…

复旦大学EMBA联合澎湃科技:共议科技迭代 创新破局

1月18日&#xff0c;由复旦大学管理学院、澎湃新闻、厦门市科学技术局联合主办&#xff0c;复旦大学EMBA项目、澎湃科技承办的“君子知道”复旦大学EMBA前沿论坛在厦门成功举办。此次论坛主题为“科技迭代 创新破局”&#xff0c;上海、厦门两地的政策研究专家、科学家、科创企…

JavaScript流程控制

文章目录 1. 顺序结构2. 分支结构2.1 if 语句2.2 if else 双分支语句2.3 if else if 多分支语句三元表达式 2.4 switch 语句switch 语句和 if else if语句区别 3. 循环结构3.1 for 循环断点调试 3.2 双重 for 循环3.3 while 循环3.4 do while 循环3.5 contiue break 关键字 4. …

3.WEB渗透测试-前置基础知识-快速搭建渗透环境(上)

上一个内容&#xff1a;2.WEB渗透测试-前置基础知识-web基础知识和操作系统-CSDN博客 1.安装虚拟机系统 linux Kali官网下载地址&#xff1a; https://www.kali.org/get-kali/#kali-bare-metal Centos官网下载地址&#xff1a; https://www.centos.org/download/ Deepin官网下…

Flask基础学习4

19-【实战】问答平台项目结构搭建_剪_哔哩哔哩_bilibili 参考如上大佬的视频教程&#xff0c;本博客仅当学习笔记&#xff0c;侵权请联系删除 问答发布的web前端页面实现 register.html {% extends base.html %}{% block head %}<link rel"stylesheet" href&q…

软件应用场景,物流货运配货单打印模板软件单据打印查询管理系统软件教程

软件应用场景&#xff0c;物流货运配货单打印模板软件单据打印查询管理系统软件教程 一、前言 以下软件以 佳易王物流快运单打印查询管理系统软件V17.1 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、打印模式可以分为 直打模式和套打模式 直打模…

在IDEA中创建vue hello-world项目

工作中最近在接触vue前端项目&#xff0c;记录一下从0搭建一个vue hello world项目的步骤 1、本地电脑安装配置node、npm D:\Project\vue\hello-world>node -v v14.21.3 D:\Project\vue\hello-world>npm -v 6.14.18 D:\Project\vue\hello-world> 2、设置npm国内淘…

2024最新前端面试题

一、css 浏览器渲染机制 定位margin 定位transform flex布局 二、js 数组是属于Object类型的&#xff0c;也就是引用类型&#xff0c;所以不能使用 typeof 来判断其具体类型。下面这些方法是判断数组的几种方法&#xff1a; 1、instanceof运算符 主要是判断某个实例&#xff08…