• Vue3学习


    Vue 3 是 Vue.js 的重大升级,带来了许多新功能和性能改进。以下是 Vue 3 的详解,包括语法和与 Vue 2 的主要差异。

    主要特性和变化

    1. 组合式 API (Composition API):

      • Vue 2 使用选项式 API(Options API),通过 data, methods, computed, watch 等选项来组织代码。
      • Vue 3 引入了组合式 API,通过 setup 函数来更好地组织和复用代码,尤其适合处理复杂组件逻辑。
    2. 性能改进:

      • Vue 3 使用 Proxy 代替 Vue 2 中的 Object.defineProperty,提高了响应式系统的性能。
      • 编译器优化和更小的打包体积。
    3. 新组件:

      • Teleport:允许在 DOM 结构的其他位置渲染组件的内容。
      • Suspense:处理异步组件加载和状态的方式更优雅。
    4. Fragments:

      • Vue 3 支持组件返回多个根节点,这在 Vue 2 中是不允许的。
    5. 更好的 TypeScript 支持:

      • Vue 3 更好地支持 TypeScript,提供了更好的类型推断和类型检查。

     Vue2&Vue3代码

    1. // Vue 2 的组件
    2. export default {
    3. data() {
    4. return {
    5. count: 0
    6. }
    7. },
    8. methods: {
    9. increment() {
    10. this.count++
    11. }
    12. },
    13. template: `
    14. <div>
    15. <p>{{ count }}</p>
    16. <button @click="increment">Increment</button>
    17. </div>
    18. `
    19. }
    20. // Vue 3 的组件
    21. import { ref } from 'vue'
    22. export default {
    23. setup() {
    24. const count = ref(0)
    25. const increment = () => {
    26. count.value++
    27. }
    28. return { count, increment }
    29. },
    30. template: `
    31. <div>
    32. <p>{{ count }}</p>
    33. <button @click="increment">Increment</button>
    34. </div>
    35. `
    36. }

    组合式API

    组合式 API 允许在一个函数中组合和复用代码逻辑

    1. import { ref, onMounted } from 'vue'
    2. export default {
    3. setup() {
    4. const count = ref(0)
    5. const increment = () => {
    6. count.value++
    7. }
    8. onMounted(() => {
    9. console.log('Component mounted')
    10. })
    11. return { count, increment }
    12. }
    13. }

    创建和挂载 Vue 3 应用

    1. import { createApp } from 'vue'
    2. import App from './App.vue'
    3. createApp(App).mount('#app')

    Vue 3 中的 Teleport 示例

    Teleport 允许你将组件的内容渲染到 DOM 的其他位置。

    1. <template>
    2. <div>
    3. <teleport to="body">
    4. <div class="modal">This is a modal</div>
    5. </teleport>
    6. </div>
    7. </template>

    Vue 3 中的 Suspense 示例 

    Suspense 组件可以用来处理异步组件的加载状态。

    1. <template>
    2. <suspense>
    3. <template #default>
    4. <AsyncComponent />
    5. </template>
    6. <template #fallback>
    7. <div>Loading...</div>
    8. </template>
    9. </suspense>
    10. </template>
    11. <script>
    12. export default {
    13. components: {
    14. AsyncComponent: defineAsyncComponent(() => import('./AsyncComponent.vue'))
    15. }
    16. }
    17. </script>

    更好的 TypeScript 支持

    Vue 3 中,通过组合式 API 和新的类型定义,TypeScript 支持得到了显著提升。以下是一个简单的示例:

    1. import { ref, defineComponent } from 'vue'
    2. export default defineComponent({
    3. setup() {
    4. const message = ref<string>('Hello, TypeScript with Vue 3!')
    5. return { message }
    6. }
    7. })

    响应式系统改进

    Vue 3 使用 Proxy 代替了 Vue 2 中的 Object.defineProperty,这使得响应式系统更加灵活和高效。以下是一个简单的示例:

    1. import { reactive } from 'vue'
    2. const state = reactive({
    3. count: 0,
    4. nested: {
    5. message: 'Hello'
    6. }
    7. })
    8. state.count++ // 响应式更新
    9. state.nested.message = 'Hi' // 深层次响应式更新

    Vue3现状

    构建工具-Vite

    Vite 是一种面向现代浏览器的一个更轻、更快的前端构建工具,能够显著提升前端的开发体验。除了Vite外,前端著名的构建工具还有Webpack和Gulp。目前,Vite已经发布了Vite2,Vite全新的插件架构、丝滑的开发体验,可以和Vue3的完美结合

    Why Vite

    我们见证了诸如 webpack、Rollup 和 Parcel 等工具的变迁,然而,当我们开始构建越来越大型的应用时,需要处理的 JavaScript 代码量也呈指数级增长。包含数千个模块的大型项目相当普遍。基于 JavaScript 开发的工具就会开始遇到性能瓶颈:通常需要很长时间(甚至是几分钟!)才能启动开发服务器,即使使用模块热替换(HMR)文件修改后的效果也需要几秒钟才能在浏览器中反映出来。如此循环往复,迟钝的反馈会极大地影响开发者的开发效率和幸福感。

    优缺点

    Vite 的快,主要体现在两个方面: 快速的冷启动和快速的热更新。而 Vite 之所以能有如此优秀的表现,完全归功于 Vite 借助了浏览器对 ESM 规范的支持,采取了与 Webpack 完全不同的 unbundle 机制。

    1. 快速冷启动:Vite只启动一台静态页面的服务器,不会打包全部项目文件代码,服务器根据客户端的请求加载不同的模块处理,实现按需加载,而我们所熟知的webpack则是,一开始就将整个项目都打包一遍,再开启dev-server,如果项目规模庞大,打包时间必然很长。

    2. 打包编译速度:当需要打包到⽣产环境时,vite使⽤传统的rollup进⾏打包,所以,vite的优势是体现在开发阶段,另外,由于vite使⽤的是ES Module,所以代码中不可以使⽤CommonJs;

    3. 热模块更新:在HRM热更新⽅⾯,当某个模块内容改变时,让浏览器去重新请求该模块即可,⽽不是像webpack重新将该模块的所有依赖重新编译;

    常见函数

    setup()

    setup函数-vue3基础(JS)-CSDNVue进阶技能树

    reactive()|ref()

    reactive函数、ref函数-vue3基础(JS)-CSDNVue进阶技能树

    computed()|watch()

    computed函数、watch函数-vue3基础(JS)-CSDNVue进阶技能树

    生命周期

    Vue3的生命周期函数-vue3基础(JS)-CSDNVue进阶技能树

    获取DOM并操作

    Vue3获取DOM、操作组件-vue3基础(JS)-CSDNVue进阶技能树

    组件间通信

    Vue3组件通信-vue3基础(JS)-CSDNVue进阶技能树

     

  • 相关阅读:
    世界环境日 | 周大福用心服务推动减碳环保
    SQL Server2022版本 + SSMS安装教程(手把手安装教程)
    集Oauth2+Jwt实现单点登录
    基于Java毕业设计房产客户信息管理系统源码+系统+mysql+lw文档+部署软件
    一篇看懂C#中的Task任务_初级篇
    数字化未来:实时云渲染在智慧城市中的创新应用
    【SSM框架】Mybatis详解11(源码自取)之事务,缓存,ORM
    leetcode45 跳跃游戏II
    某瑞集团安全技术研发岗位面试
    《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(9)-Fiddler如何设置捕获Https会话
  • 原文地址:https://blog.csdn.net/m0_55049655/article/details/139565779