vue保姆级教程----深入了解 Vue3与Vue2的区别对比


在Vue2中编译时会生成如下render函数:



with(this){
return _c(‘div’,[_v(_s(message))])
}


 而在Vue3中,同样的模板会编译成:



return {
render() {
return _c(‘div’,{
message: ctx.message
})
}
}


这样就避免了无谓的代理操作,提升了性能。 


2、代理:Vue3中的代理可以自动批量代理对象中的所有属性,无需一个一个声明。


3、模板编译优化:引入块级作用域,模板中的变量不会互相污染。


Vue3中的模板编译支持块级作用域,这样模板中的变量就不会互相污染了。


例如在Vue2中,父组件和子组件中使用相同的变量名会互相影响:



// 父组件

{{message}}

// 子组件

{{message}}
```

但在Vue3中,引入了块级作用域,不存在这个问题:

// 父组件
<template>
  <div>{{message}}</div>
  <child-component></child-component> 
</template>

// 子组件
<template>
  <div>{{message}}</div> // 不受父组件的影响
</template>

4、源码采用TS重写,运行更高效。Vue3使用TypeScript重写源码,类型检查更严谨,编码时也能获得更好的提示。同时TS运行效率也比纯JavaScript要高,对性能有提升作用。

二、组合式API

Vue3提供了setup方法,我们可以更灵活地组合逻辑代码,不再受以前data、methods等选项的限制。

// Vue2
export default {
  data() {
    return {
      message: 'Hello Vue2'
    }
  },
  methods: {
    onClick() {
      console.log(this.message)
    }
  }
}

// Vue3
import {ref, onMounted} from 'vue'

export default {
  setup() {
    const message = ref('Hello Vue3')
    
    onMounted(() => {
      console.log(message.value)
    })
    
    return {
      message
    }
  }
}

三、新增特性

  1. Fragment:文档碎片,不再要求组件根节点是单个元素。
<!-- Vue2需使用一个根节点 -->
<template>
  <div>
    <header></header>
    <main></main>
    <footer></footer>
  </div>
</template>

<!-- Vue3可以不使用根节点 -->
<template>
  <header></header>
  <main></main>
  <footer></footer>
</template>
  1. Teleport:瞬移组件根节点到指定DOM位置。
<teleport to="#modal">
  <div>弹窗内容</div>
</teleport>
  1. Suspense:支持异步组件加载时显示加载界面。
<suspense>
  <async-component></async-component>
  <template #fallback>
    加载中...
  </template>
</suspense>

四、移除过滤器

过滤器已不被官方推荐,Vue3中移除了过滤器这个概念。

Vue2中我们可以通过过滤器改变数据的展示:

<!-- 在双括号插值中 -->
<div>{{ message | capitalize }}</div> 

<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>

// 定义过滤器
filters: {
  capitalize: function (value) {
    if (!value) return ''
    value = value.toString()
    return value.charAt(0).toUpperCase() + value.slice(1)
  }
}

但在Vue3中,过滤器被完全移除了。官方推荐通过方法调用或计算属性去实现数据变换。

五、移除事件API

Vue3移除了 o n 、 on、 onoff、$once方法,改为使用emits属性。

Vue2中我们通过 o n , on, on,off,$once管理事件:

// 监听事件
this.$on('test', handle)

// 取消监听
this.$off('test', handle)

// 监听一次
this.$once('test', handle)

Vue3中推荐使用emits属性替代这些事件API:

emits: ['test']

六、新增Composition API

Vue3全新提供了一套更适合功能开发的Composition API 如ref、reactive等,我们可以更灵活地组织组件的逻辑。

例如ref实现响应式数据:

import {ref} from 'vue'

const counter = ref(0)

reactive转换对象为响应式:

import {reactive} from 'vue'

const state = reactive({
  count: 0
})

computed实现计算属性等,这套API给了我们更多可能性。

七、tree-shaking支持

Vue3支持tree-shaking,也就是打包时只打包实际用到的代码,减少了打包产物体积。

八、调整部分API命名

一些API做了重命名,语义更加明确,例如:

  • $listeners 改为 emits
  • $attrs 改为 expose

九、新的全局API

Vue3提供了一些新的全局API:

  • createApp:用于创建Vue实例
import {createApp} from 'vue'

const app = createApp(App)
  • defineComponent: 定义组件
import {defineComponent} from 'vue'

const Component = defineComponent({})
  • defineAsyncComponent:定义异步组件
  • nextTick:在下次DOM更新循环结束之后执行延迟回调
  • h:创建虚拟节点
import {h} from 'vue' 

// 在render函数中: 
return h('div', {}, [
  h('span', {}, 'VNode') 
])

十、新的组件实现方式

Vue3推荐使用组合式API来实现组件逻辑,我们可以使用setup函数并返回响应式状态:

// MyComponent.vue

import {ref, reactive} from 'vue'

export default {
  setup() {
    const message = ref('Hello')
    
    const state = reactive({
      name: 'John'  
    })
    
    return {
      message,


**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/77b73caad1a49c592d870a6e6cf10fbf.jpeg)
![img](https://img-blog.csdnimg.cn/img_convert/379e69b8797dc4db24dbb69541c80358.png)
![img](https://img-blog.csdnimg.cn/img_convert/670ddb681a2d5839490287b177deb72f.png)
![img](https://img-blog.csdnimg.cn/img_convert/95b4cfc62eb6b29fb8d584aaaa8e9340.png)
![img](https://img-blog.csdnimg.cn/img_convert/aad0769dbd1a7359191fd7429ebc148a.png)
![img](https://img-blog.csdnimg.cn/img_convert/ac0d8ce43e7806643389f4c0e86bcac2.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)**
![img](https://img-blog.csdnimg.cn/img_convert/f79cbda7271218a8bfe036ccb4ad0a97.png)



### 紧跟潮流



大前端和全栈是以后前端的一个趋势,懂后端的前端,懂各端的前端更加具有竞争力,以后可以往这个方向靠拢。

这边整理了一个对标“阿里 50W”年薪企业高级前端工程师成长路线,由于图片太大仅展示一小部分


![](https://img-blog.csdnimg.cn/img_convert/8f4634e85dd904c95364c9d62e0e9eff.png)

**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
![img](https://img-blog.csdnimg.cn/img_convert/9796945df5eda48da5fc944a3604f821.png)



### 紧跟潮流



大前端和全栈是以后前端的一个趋势,懂后端的前端,懂各端的前端更加具有竞争力,以后可以往这个方向靠拢。

这边整理了一个对标“阿里 50W”年薪企业高级前端工程师成长路线,由于图片太大仅展示一小部分


![](https://img-blog.csdnimg.cn/img_convert/8f4634e85dd904c95364c9d62e0e9eff.png)

**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中...(img-qrfqzC5O-1712869687632)]

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当涉及到 Vue DHTMLX-Gantt 导出 Excel 的保姆级完整教程时,以下是一步一步的指南: 1. 确保您的项目中已经安装了 Vue 和 DHTMLX-Gantt。如果尚未安装,请使用以下命令进行安装: ```bash npm install vue dhtmlx-gantt ``` 2. 在您的 Vue 组件中引入所需的库和样式: ```javascript import 'dhtmlx-gantt'; import 'dhtmlx-gantt/codebase/dhtmlxgantt.css'; ``` 3. 创建一个 Vue 组件,并在模板中添加一个 Gantt 图表和一个按钮: ```html <template> <div ref="ganttContainer" style="width: 100%; height: 600px;"></div> <button @click="exportData">导出 Excel</button> </template> <script> import * as XLSX from 'xlsx'; import FileSaver from 'file-saver'; export default { mounted() { const ganttContainer = this.$refs.ganttContainer; gantt.init(ganttContainer); // 设置 Gantt 图表的配置和数据 // 示例数据 const tasks = [ { id: 1, text: '任务1', start_date: '2022-01-01', duration: 5, progress: 0.5 }, { id: 2, text: '任务2', start_date: '2022-01-06', duration: 4, progress: 0.2 }, // 其他任务... ]; gantt.parse({ data: tasks }); }, methods: { exportData() { const gantt = this.$refs.ganttContainer.$gantt; const tasks = gantt.getDatastore('task').getItems(); // 将任务数据转换为 Excel 数据格式 const data = tasks.map((task) => { return { id: task.id, text: task.text, start_date: task.start_date, duration: task.duration, progress: task.progress, }; }); // 创建 Excel 文件 const worksheet = XLSX.utils.json_to_sheet(data); const workbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(workbook, worksheet, 'Gantt Data'); const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' }); const excelData = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); // 下载 Excel 文件 FileSaver.saveAs(excelData, 'gantt_data.xlsx'); }, }, }; </script> <style> /* 可选的样式 */ </style> ``` 4. 在上述示例代码中,需要注意以下部分: - 在 `mounted` 钩子中,使用 `gantt.init(ganttContainer)` 初始化 Gantt 图表,并根据您的需求设置其配置和数据。 - `exportData` 方法用于将 Gantt 图表数据导出到 Excel。确保在 `exportData` 方法中的 `this.$refs.ganttContainer.$gantt` 是对 Gantt 图表组件的正确引用。 - 点击 "导出 Excel" 按钮时,将会生成一个名为 `gantt_data.xlsx` 的 Excel 文件,其中包含了 Gantt 图表的数据。 这就是使用 Vue DHTMLX-Gantt 导出 Excel 的保姆级完整教程。希望对您有所帮助!如果您有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值