shallowReactive
: 只处理对象最外层属性的响应式(浅响应式)shallowRef
: 只处理基本数据类型的响应式,不进行对象的响应式处理readonly
:让一个响应式数据变为只读的(深只读)shallowReadonly
: 让一个响应式数据变为只读的(浅只读)toRaw
reactive
生成的响应式对象
转为普通对象
markRaw
永远不会再成为响应式对象
自定义的ref
,并对其依赖项跟踪和更新触发进行显式控制<template> <input type="text" v-model="keyword"> <h3>{{keyword}}</h3> </template>
<script> import { ref, customRef} from 'vue' export default { setup() { // 自定义一个myRef function myRef(value) { let timer return customRef((track,trigger) => { // customRef接收一个函数为参数,需要return出去一个getter和setter return { get() { track(); // 这个value值是需要被追踪的,这里不写的话之后更改value页面也不会同步改变 return value; }, set(newValue) { value = newValue; trigger(); // 通知vue去重新解析模版 } } }) } let keyword = myRef('hello'); return { keyword } } } </script>
provide
选项来提供数据,孙组件有一个inject
选项来开始使用这些数据(父子组件也可以用,但是没必要)setup() { ...... let person = reactive({name:'AIpoem',age: 19}); provide('p',person); }
setup() { ...... let person = inject('p'); return {person}; }
<teleport to="body"> <!--这里的to后接指定位置--> <div v-if="isShow" class="mask"> <div class="dialog"> <h3>我是一个弹窗/h3> <button @click="isShow = false">关闭弹窗</button> </div> </div> </teleport>
Suspense
是一个试验性的新特性,其api可能随时会发生变动。生产环境请勿使用。import {defineAsyncComponent} from 'vue' const Child = defineAsyncComponent(() => import('./components/Child.vue'))
Suspense
包裹组件,并配置好default
和fallback
<template> <div class="app"> <h3>我是App组件</h3> <Suspense> <template #default> <child></child> </template> <template #fallback> <h3>加载中...</h3> // 异步组件未渲染出来时显示的内容 </template> </Suspense> </div> </template>
vue3.0将全局的api,即Vue.xxx
调整到应用实例(app)上
2.x全局API | 3.0实例API |
---|---|
Vue.config.xxxx | Vue.config.xxxx |
Vue.config.productionTip | 移除 |
Vue.component | app.component |
Vue.directive | app.directive |
Vue.mixin | app.mixin |
Vue.use | app.use |
Vue.prototype | app.config.globalProperties |
keyCode
作为v-on
的修饰符v-on.native
修饰符
<my-component v-on:close="handleComponentEvent" v-on:click="handleNativeClickEvent" />
<script> export default { emits: ['close'] // 声明了的就是自定义事件,没指定的click事件就是原生事件 } </script>
完