Vue 3.x基础

Vue 3.x基础

模版

<template>
    // html
</template>

<script setup>
    // setup API
    // ...

</script>

<style>
    // css
</style>

setup API

变量(响应式)

// 基本数据类型
let refValue = ref(1)
console.log(refValue.value) // 1

// 复杂数据类型
let reactiveValue = reactive({ a: 1, b: 2 })
console.log(reactiveValue) // { a: 1, b: 2 }

// 解构toRefs,一般用于reacative创建的变量
const { a, b } = toRefs(reactiveValue)
console.log(a, b) // 1, 2

函数

// 创建
const changeValue = (v) => {
    refValue.value = v
    console.log(v) // 1
}
// 调用
changeValue(1)

生命周期

选项式 API Setup API 调用时机 beforeCreate Not needed # created Not needed # beforeMount onBeforeMount(常用) 在挂载开始之前被调用:相关的 render 函数首次被调用。 mounted onMounte(常用) 组件挂载时调用 beforeUpdate onBeforeUpdate 数据更新之前调用,此时DOM还未更新 updated onUpdated DOM 重新渲染和打补丁,此时DOM已更新,不要在该钩子函数里更新数据。 beforeUnmount onBeforeUnmount 在卸载组件实例之前调用。此时Vue实例仍是正常的。 unmounted onUnmounted 卸载组件实例后调用,组件实例的所有指令、事件侦听器都被移、子组件实例都会被卸载。 activated onActivated 被 keep-alive 缓存的组件激活时调用。 deactivated onDeactivated 被 keep-alive 缓存的组件停用时调用。 errorCaptured onErrorCaptured 当捕获一个来自子孙组件的错误时被调用,此钩子可以返回 false 以阻止该错误继续向上传播。 renderTracked onRenderTracked # renderTriggered onRenderTriggered #

注意:因为 setup 是++围绕 beforeCreate 和 created++ 生命周期钩子运行的,所以不需要显式地定义它们。换句话说,在这些钩子中编写的任何代码都应该直接在 setup 函数中编写。


onMounted(() => {
    console.log('Component is mounted!')
})
// ...

计算属性、侦听器


// 定义一个计算属性,计算年龄是否为18
const ageIs18 = computed(() => {
  return age.value === 18
})

// 定义一个watch侦听器,监控count变化
watch(count, (nV, oV) => {
  console.log(nV, oV)
})

路由


import { createRouter, createWebHashHistory } from 'vue-router'

const routes = [
  {
    path: '/',
    redirect: '/home'
    // component: () => import('../pages/home.vue') // 组件懒加载
  }
  ...

]

// 创建路由实例
const router = createRouter({
  history: createWebHashHistory(), // 使用 hash 模式
  routes, // routes: routes 的缩写
})

export default router

import { createApp } from 'vue'
import router from './router'
...

const app = createApp(App)
app.use(router) // 挂载路由到Vue

    import { useRouter } from 'vue-router'

    // useRouter()用于获取路由对象
    const router = useRouter()
    router.push({ path: '/next' })

    // useRoute()用于获取当前路由对象
    const route = useRoute()
    const query = route.query

pinia

Vuex替代品,全局数据管理器


import { defineStore } from 'pinia'
import { ref, computed, reactive } from 'vue';

// useStore 可以是 useUser、useCart 之类的任何东西
// 第一个参数是应用程序中 store 的唯一 id
export const usePiniaStore = defineStore('user', () => {
  // vue3 setup编程模式,让结构更加扁平化
  const _this = window.$this

  // state
  const userId = ref('111122')
  const userData = ref(null)

  // action
  const getUser = async () => {
    const res = await _this.$api.getId()
    userData.value = res.data
  }

  // getter
  const userName = computed(() => userData.value.id + ' ---- ')

  // 导出
  return { userData, userName, getUser, userId }
})

    import { usePiniaStore } from '../pinia/user.js'

    // 使用pinia user module
    const useStore = usePiniaStore()
    // 解构state
    const { userData, userName, userId } = storeToRefs(useStore)
    // 直接调用pinia函数
    useStore.getUser()
    // 直接赋值
    userId.value = 'aaa'
    console.log(userStore:, userId.value, userData.value)

Original: https://www.cnblogs.com/zh1q1/p/16399735.html
Author: 吴知木
Title: Vue 3.x基础

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/599353/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 2_jQuery

    jQuery, 顾名思义, 也就是JavaScript和查询(Query), 它就是辅助JavaScript开发的js类库 它的核心思想write less, do more(写的…

    数据库 2023年6月11日
    090
  • HMX-Server C++ 分步式服务器大版本更新了(有源码)

    原文地址:http://www.cnblogs.com/hellohuang/p/6294763.htmlHMX-ServerHMX-Server分步式服务器框架,主要分为网关、登…

    数据库 2023年6月14日
    095
  • 前端开发:如何正确地跨端

    导读:面对多种多样的跨端诉求,有哪些跨端方案?跨端的本质是什么?作为业务技术开发者,应该怎么做?本文分享阿里巴巴ICBU技术部在跨端开发上的一些思考,介绍了当前主流的跨端方案,以及…

    数据库 2023年6月14日
    083
  • 配置nginx只打印延迟超过0.1s和非2XX的accesslog

    背景 当业务accesslog全开时,写入es的qps达到了10W,评估后觉得不太值得,所以考虑抽样打印。查看相关文档后发现目前我们使用的nginx版本不支持抽样打印,所以考虑其他…

    数据库 2023年6月9日
    073
  • MIT 6.824 Lab2D Raft之日志压缩

    书接上文Raft Part C | MIT 6.824 Lab2C Persistence。 实验准备 实验代码: git://g.csail.mit.edu/6.824-gola…

    数据库 2023年6月14日
    0146
  • Java面试题(二)–MySQL

    1 存储引擎 1、简单描述一个Mysql的内部结构? MySQL的基本架构示意图:大体来说,MySQL可以分为 server层和 存储引擎层两部分。 ① server层包括连接器、…

    数据库 2023年5月24日
    089
  • 部署zabbix监控服务

    部署zabbix监控服务 部署zabbix监控服务 什么是zabbix zabbix的特点 zabbix的配置文件 部署zabbix zabbix服务端安装 准备工作 数据库操作 …

    数据库 2023年6月14日
    086
  • MySQL之多表查询、Navicat及pymysql

    一、多表查询 1.1 数据准备 — 建表 create table dep( id int primary key auto_increment, name varchar(20…

    数据库 2023年5月24日
    090
  • 多商户商城系统功能拆解24讲-平台端分销会员

    多商户商城系统,也称为B2B2C(BBC)平台电商模式多商家商城系统。可以快速帮助企业搭建类似拼多多/京东/天猫/淘宝的综合商城。 多商户商城系统支持商家入驻加盟,同时满足平台自营…

    数据库 2023年6月14日
    087
  • canal

    canal 简介 canal 主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。 canal 工作原理: canal 模拟 MySQL slave 的交互协议…

    数据库 2023年6月14日
    075
  • C++学习笔记(5)–STL

    void test03() { for (size_t i = 0; i < 100; ++i, cout << i << " "…

    数据库 2023年6月14日
    091
  • 《Redis设计与实现》

    由浅到深,逐步讲解Redis 本书主要分为四大部分。 第一部分”数据结构与对象”: 介绍了Redis中的各种对象及其数据结构,并说明这些数据结构如何影响对象…

    数据库 2023年6月6日
    082
  • [LeetCode]28. 实现 strStr()

    实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始…

    数据库 2023年6月9日
    082
  • index_merge引发的死锁排查

    前几天排查了一个死锁问题,最开始百思不得其解,因为发生死锁的两个事务是单语句事务,语句类型相同(where属性列相同,仅值不同),而且语句都走了相同的索引,但最终确实发生了死锁。通…

    数据库 2023年6月9日
    087
  • Centos安装mysql57

    1.1 MySQL安装 1.1.1 下载 wget 命令 yum -y install wget 1.1.2 在线下载mysql安装包 wget https://dev.mysql…

    数据库 2023年5月24日
    0107
  • 使用clipboard.js复制文字+图片到微信后图片不显示问题处理

    使用clipboard.js复制文字 +图片,粘贴到微信不显示图片,而QQ可以。 解决方案: 图片链接使用http,不要使用https。 使用clipboard.js实现复制功能 …

    数据库 2023年6月14日
    0103
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球