Vue 3.x基础模版 template // html/templatescript setup // setup API // .../scriptstyle // css/style setup API 变量(响应式) // 基本数据类型let refValue = ref(1)console.log(refValue.value) // 1// 复杂数据类型let reacti
<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)
生命周期
注意:因为 setup 是++围绕 beforeCreate 和 created++ 生命周期钩子运行的,所以不需要显式地定义它们。换句话说,在这些钩子中编写的任何代码都应该直接在 setup 函数中编写。
<script setup>
onMounted(() => {
console.log('Component is mounted!')
})
// ...
</script>
计算属性、侦听器
<script setup>
// 定义一个计算属性,计算年龄是否为18
const ageIs18 = computed(() => {
return age.value === 18
})
// 定义一个watch侦听器,监控count变化
watch(count, (nV, oV) => {
console.log(nV, oV)
})
</script>
路由
<!-- router.js -->
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
<!-- main.js -->
import { createApp } from 'vue'
import router from './router'
...
const app = createApp(App)
app.use(router) // 挂载路由到Vue
<!-- pages/home.vue -->
<script setup>
import { useRouter } from 'vue-router'
// useRouter()用于获取路由对象
const router = useRouter()
router.push({ path: '/next' })
// useRoute()用于获取当前路由对象
const route = useRoute()
const query = route.query
</script>
pinia
Vuex替代品,全局数据管理器
<!-- pinia/user.js -->
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 }
})
<!-- pages/user.vue -->
<script setup>
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)
</script>