一、Vue3.0 环境搭建
使用 vite 创建 Vue(3.2.30)项目
npm install yarn -gyarn create vite vue3-project --template vuecdvue3-project // 进入项目根目录yarn // 安装依赖包yarn dev // 启动本地服务
安装 vue-router、vuex全家桶
yarn add vue-router@latest // v4.0.14
yarn add vuex@latest // v4.0.2
安装 UI 组件库:在Vue3环境中,一定找支持 Vue3的组件库,那些 Vue2的组件库是无法使用的。
yarn add ant-design-vue@next // v2.2.8
yarn add vite-plugin-components --dev // 支持ant-design-vue按需引入
支持 ant-design-vue 组件按需引入
#vite.config.tsimport{defineConfig}from'vite'importvuefrom'@vitejs/plugin-vue'importViteComponents,{AntDesignVueResolver}from'vite-plugin-components'// https://vitejs.dev/config/exportdefaultdefineConfig({plugins:[vue(),ViteComponents({customComponentResolvers:[AntDesignVueResolver()],})]})
支持 Sass 样式语法
yarn add sass // v1.49.9
1、入口文件 main.js
import{createApp}from'vue'importrouterfrom'./router.ts'importstorefrom'./store'importAppfrom'./App.vue'// 导入UI样式表import"ant-design-vue/dist/antd.css"constapp=createApp(App)// 配置全局属性(这里不能再使用Vue.prototype了)app.config.globalProperties.$http=''app.use(router)// 注册路由系统app.use(store)// 注册状态管理// 全局指令app.directive('highlight',{beforeMount(el,binding,vnode){el.style.background=binding.value}})app.mount('#app')// 挂载
2、Vue-Router (v4) 详解
注意:在vue3环境中,必须要使用vue-router(v4)
创建router,使用createRouter()
指定路由模式,使用history属性:createWebHashHistory/createWebHistory()
路由注册,在mian.js中 app.use(router)
如果当前项目严格使用组合式API进行开发,必须使用 useRoute、userRouter等Hooks API进行开发。
新增了几个组合API:useRoute/useRouter/useLink。
查询vue-router(v3)和vue-router(v4)的变化:https://next.router.vuejs.org/zh/guide/migration/index.html
在Vue3环境中编写路由配置,参考代码如下:
import{createRouter,createWebHashHistory}from'vue-router'constHome=()=>import('@/pages/study/Home.vue')constFind=()=>import('@/pages/study/Find.vue')constUser=()=>import('@/pages/study/User.vue')constCnode=()=>import('@/pages/cnode/index.vue')exportdefaultcreateRouter({history:createWebHashHistory(),// Hash路由routes:[{path:'/home',component:Home,meta:{transition:'fade',isAlive:true}},{path:'/find',component:Find},{path:'/user',component:User},{path:'/cnode',component:Cnode}]})
3、Vuex 根store 代码示例
版本:在vue3环境中,必须要使用 vuex(4)
注意:在组件中使用 vuex数据时,哪怕是在setup中,也要使用 computed 来访问状态管理中的数据,否则数据不响应。
在Vue3环境中编写 Vuex代码示例如下:
#src/store/index.tsimport{createStore}from'vuex'importcnodefrom'./modules/cnode'exportdefaultcreateStore({getters:{},modules:{cnode}})
4、Vuex 子store 代码示例
#src/store/modules/cnode.tsimport{fetchList}from'@/utils/api'exportdefault{namespaced:true,state:{msg:'cnode',list:[],cates:[{id:1,tab:'',label:'全部'},{id:2,tab:'good',label:'精华'},{id:3,tab:'share',label:'分享'},{id:4,tab:'ask',label:'问答'},{id:5,tab:'job',label:'招聘'}]},mutations:{updateList(state,payload){state.list=payload}},actions:{getList({commit},params){fetchList(params).then(list=>{console.log('文章列表',list)commit('updateList',list)})}}}
5、App 根组件代码示例
二、组合API 详解
为什么要使用setup组合?
Vue3 中新增的 setup,目的是为了解决 Vue2 中“数据和业务逻辑不分离”的问题。
Vue3中使用 setup 是如何解决这一问题的呢?
第1步: 用setup组合API 替换 vue2 中的data/computed/watch/methods等选项;
第2步: 把setup中相关联的功能封装成一个个可独立可维护的hooks。
1、ref
作用:一般用于定义基本数据类型数据,比如 String / Boolean / Number等。
背后:ref 的背后是使用 reactive 来实现的响应式.
语法:const x = ref(100)
访问:在 setup 中使用 .value 来访问。
2、isRef
作用:判断一个变量是否为一个 ref 对象。
语法:const bol = isRef(x)
3、unref
作用:用于返回一个值,如果访问的是 ref变量,就返回其 .value值;如果不是 ref变量,就直接返回。
语法:const x = unref(y)
4、customRef
作用:自定义ref对象,把ref对象改写成get/set,进一步可以为它们添加 track/trigger。
5、toRef
作用:把一个 reactive对象中的某个属性变成 ref 变量。
语法:const x = toRef(reactive(obj), 'key') // x.value
6、toRefs
作用:把一个reactive响应式对象变成ref变量。
语法:const obj1 = toRefs(reactive(obj))
应用:在子组件中接收父组件传递过来的 props时,使用 toRefs把它变成响应式的。
7、shallowRef
作用:对复杂层级的对象,只将其第一层变成 ref 响应。 (性能优化)
语法:const x = shallowRef({a:{b:{c:1}}, d:2}) 如此a、b、c、d变化都不会自动更新,需要借助 triggerRef 来强制更新。
8、triggerRef
作用:强制更新一个 shallowRef对象的渲染。
语法:triggerRef(shallowRef对象)
参考代码:见上例。
9、reactive
作用:定义响应式变量,一般用于定义引用数据类型。如果是基本数据类型,建议使用ref来定义。
语法:const info = reactive([] | {})