飞道的博客

vue2.7 火影版本,难道只是vue3的过度版?

773人阅读  评论(0)

vue 2.7版本详解

自从 vue3 [代号:海贼王] 2022年2月7日 成为默认版本后,vue2 将在 2023年底 彻底结束。

那么最近7月1日发布的,vue2 的最后 2.7 版本 [代号:火影忍者又能有什么用呢?

 vue2.7正是为了解决过度问题,增加了部分vue3的写法和特性,又保留vue2原始特性。

Ⅰ.适用场景

        如果 ui框架和一些三方件 还没有升级到 vue3.x , 这时可以先升级到 vue2.7,用 vue3的写法,去开发 vue2 新页面。

        等到三方件和ui框架升级后,我们就可以直接去升级vue3.x,之前用vue3写法开发的页面会享受到 vue3 代理对象proxy的优势; 那么之前 vue2语法, vue3也是兼容的,只是数据响应速度和性能还是vue2的程度。

Ⅱ.更新内容 (详解 => Ⅳ)

  • setup() 函数<script setup> ( 单文件组件 )
  • 组合 API (reactive 、ref 、watch ...)
  • CSS v-bind  (单文件组件)
  • Api模块化(如: import { nextTick } from ‘vue’ ; )
  • defineComponent()  重载函数
  • 支持emits对象
  • ...

Ⅲ.升级指南

①删除根目录的  node_modules文件夹   和  package-lock.json

②打开 package.json 文件 => 修改配置如:

 ③修改配置后: 执行命令   npm i  下载升级后的三方件包。

 Ⅳ. 新增内容用法和详解

         ①  setup() 函数 和  <script setup> ( 单文件组件 )


  
  1. <template>
  2. <div>
  3. <h3> {{ num }} </h3>
  4. <button @click = "add"> 增加+1 </button>
  5. </div>
  6. </template>
  7. <!-- 1. setup函数写法 -->
  8. <script>
  9. import { ref } from 'vue';
  10. export default {
  11. setup( ) {
  12. const num = 123;
  13. function add( ){
  14. num. value++;
  15. }
  16. return { num, add };
  17. },
  18. }
  19. </script>
  20. ----------------------------------------------
  21. <!-- setup单文件组件写法 -->
  22. <script setup>
  23. import { ref } from 'vue';
  24. const num = ref( 18);
  25. function add( ){
  26. num. value++;
  27. }
  28. </script>

  组合 API  (reactive 、ref 、watch ...)


  
  1. <template>
  2. <div>
  3. <h3> {{ num }} </h3>
  4. <button @click = "add"> 增加+1 </button>
  5. </div>
  6. </template>
  7. <script setup>
  8. import { ref , watch } from 'vue';
  9. const num = ref( 18);
  10. function add( ){
  11. num. value++;
  12. }
  13. watch(num , (now , old)=>{ console. log( 'num更新了=>' + num ) })
  14. </script>

③  CSS v-bind  (单文件组件)


  
  1. <template>
  2. <div>
  3. <div class='box'> </div>
  4. <button @click='colorChange'>更换颜色 </button>
  5. </div>
  6. </template>
  7. <script setup>
  8. import { ref } from 'vue';
  9. const bool = ref( false);
  10. const color = ref( 'red');
  11. function colorChange( ){
  12. bool. value = !bool. value;
  13. bool. value?color. value= 'red':color. value= 'blue';
  14. }
  15. </script>
  16. <style scoped>
  17. .box{
  18. width: 100px;
  19. height: 100px;
  20. background: v-bind( 'color');
  21. }
  22. </style>

④ defineComponent()  重载函数

最重要作用是:在TypeScript下,给予了组件 正确的参数类型推断

封装其实意义不大,如:


  
  1. <!-- 只是对setup函数进行封装,返回options的对象 -->
  2. <script>
  3. export function defineComponent( options: unknown) {
  4. return isFunction(options) ? { setup: options } : options
  5. }
  6. </script>

支持emits对象

主要是子组件调用父组件的方法,起到一个验证作用 =>

① 子组件 如:


  
  1. <template>
  2. <div>
  3. <button @click = "childClick"> 按钮 </button>
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. emits:{
  9. toFather: (bool) { retrun bool };
  10. //=>传入true 才会验证通过
  11. //toFather: null 非验证
  12. },
  13. setup( props,{emit}) {
  14. function childClick( ){
  15. emit( 'toFather', true);
  16. }
  17. return { childClick};
  18. },
  19. }
  20. </script>

②父组件 如:


  
  1. <template>
  2. <div>
  3. <Btn @toFather = "fun"/>
  4. </div>
  5. </template>
  6. <script>
  7. import Btn from './Btn.vue'
  8. export default {
  9. setup( ) {
  10. function fun( ){
  11. console. log( '被子组件 调用了!')
  12. }
  13. return { fun };
  14. },
  15. }
  16. </script>

 Ⅳ. 注意事项

  • reactive( {a:1} )  === { a:1 }  并为和vue3一样 ,采用 proxy 对象,只是写法一样。
  • <script lang= "ts">   写法并不支持
  • 不支持异步组件初始化
  • ...

转载:https://blog.csdn.net/weixin_42232622/article/details/125792343
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场