yarn install
yarn serve
yarn build
yarn lint
确保 使用vue-cli 4.2以上的版本 创建项目 使用默认配置
用插件的形式 vue add vue-next 使用下个阶段的vue版本
在setup中我们可以定义data 使用reactive 函数 去让他变成响应式的数据 最后return 出去
computed 可以让他变成计算属性
export default {
setup(){
const data = reactive({
count:0,
// 计算属性
count2:computed(()=>{
return data.count*2
})
})
return{
data
}
}
}
setup中也可以声明函数 一样需要return出去
...
setup(){
function counter(){
...
}
return {
counter
}
}
return 出来的函数 或者变量 就可以在template 中使用 例如
<template>
<h1>count:{{ data.count }}</h1>
</template>
用ref 包裹着的值 取值的时候得用.value 去访问
const index = ref(0)
console.log(index.value)
index.value++
如果在template 中 有一个
<div ref="second">222</div>
在setup中可以把div读出来
setup(){
const second = ref()
onMounted(()=>{
console.log(second.value) // div
})
//unref
//isRef
//shallowRef
// readonly
return {
root,second
}
}
还有readonly unref isRef shallowRef shallowReadonly 等api
在setup 中 watchEffect watch
setup(){
const data = reactive({
message:"123"
})
//watch effect
const stop = watchEffect(()=>{
console.log(data.message)
})
// watch
watch(()=>data.message,(newValue,old)=>{
console.log('new:',newValue)
console.log('old:',old)
},{
immediate:true,
deep:true
})
const index = ref(0)
function addMessage(){
data.message += index.value
index.value ++ ;
if (index.value === 5) {
stop()
}
}
return {
data,addMessage
}
}
const MyComponent = {
setup() {
onMounted(() => {
console.log('mounted!')
})
onUpdated(() => {
console.log('updated!')
})
onUnmounted(() => {
console.log('unmounted!')
})
}
}
beforeCreate -> use setup()
created -> use setup()
beforeMount -> onBeforeMount
mounted -> onMounted
beforeUpdate -> onBeforeUpdate
updated -> onUpdated
beforeDestroy -> onBeforeUnmount
destroyed -> onUnmounted
errorCaptured -> onErrorCaptured
onRenderTracked
onRenderTriggered
use 开头 的 hooks 文件
示例 provide inject 的简写
import { inject, provide } from "vue";
const store = Symbol()
export default function useStore(defaultStore = {}) {
return inject(store,defaultStore)
}
export function provideStore(value){
provide(store,value)
}
yarn add vue-router@next
import {createRouter, createWebHistory} from 'vue-router'
const routes =[
{
path:'/',
component:()=>import('../components/HelloWorld.vue')
},
{
path:'/parent',
component:()=>import('../components/parent.vue')
}
]
export default createRouter({
history:createWebHistory(),
routes
})
在main.js 中 使用
createApp(App).use(router).mount('#app')