vue3从入门到入院

题记

vue3稳定版本发行有一段时间,而最近比较忙,一直没有时间整理和学习vue3。蹭着小空隙,整理下vue3的知识,希望能小小的帮助正在学习vue3的朋友。

安装与基本工具版本适配

vite

随着前端的发展,使得很多项目中js模块的数量越来越多,使得我们在打包运行等待时间长,浏览器缓慢的反馈影响开发体验。而Vite旨在通过利用生态系统中的新进步来解决这些问题:浏览器中本机ES模块的可用性以及以本机语言编写的JavaScript工具的兴起。
而在我最近使用的项目也发现vite比webpack等打包工具快得多,vite能极大得减少打包的时间,在开发的时候体验真的很好。

安装

Vite需要Node.js版本> = 12.0.0。
npm安装

npm install create-vite-app -g

yean安装

yarn global add create-vite-app@1.18.0

vite安装vue

npx create-vite-app demo

配置elemnetui

vue3适配的elementui版本为element-plus。
vite配置:

plugins: [
    vue(),
    vitePluginImport([
      {
        libraryName: 'element-plus',
        libraryDirectory: 'es',
        style(name) {
          return `element-plus/lib/theme-chalk/${name}.css`;
        },
      }
    ])
  ],

可根据官网配置相关的模块

配置sass

首先注意在新的版本中,sass是存在版本冲突的。建议安装包

"node-sass": "^4.14.1"
"sass-loader": "^7.1.0"

vite配置 参考 vite官网css配置

    preprocessorOptions: {
      sass: {
        javascriptEnabled: true,
      }
    }
  }

安装正确版本echarts

4.9是比较稳定版本,引用其他版本会在使用一些特殊图表时候导致不能使用。列如echarts-liquidfill

“echarts”: “^4.9.0”

新变化、特效

内置组件teleport

也称为传送门, 它可以将元素传送到指定位置
,列如hello传送到body节点下。另外可以指定类以及id传输。

<teleport to="head">
    <div>hello</div>
</teleport>
<teleport to="#some-id" />
<teleport to=".some-class" />
<teleport to="[data-teleport]" />

分片Fragment

我们都知道在vue2中templet下必须只有一个根元素。但是在vue3中,可以有多个节点暴露出来。像这样

    <templet>
        <div></div>
        <div></div>
        <div></div>
   </templet>

fargment是一个虚拟的节点,不会在DOM树中呈现,所以不会创建多余的元素。

全局api

createApp

在vue2中没有全局app的概念,我们定义实例只是通过 new Vue() 创建 Vue 实例。从同一个 Vue 构造函数创建的实例共享全局配置,因而导致全局配置很容易意外地污染其他测试用例。用户需要仔细存储原始全局配置。
而在vue3中改用使用全局api中的createApp来创建实例,调用 createApp 返回一个应用实例。

import { createApp } from 'vue'
import router from './router/index'
import App from './App.vue';
//vue3中创建实例
const app = createApp(App);
//创建组件
app.component('span', {
  data: () => ({
    count: 0
  }),
  template: '<span>{{count}}</span>'
})
//创建指令
app.directive('focus', {
  mounted: el => el.focus()
})

app.use(router);
app.mount('#app');
//vue2中创建实例
new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue.js!'
  }
})

在vue3中use将不再使用,而使用app.use()代替

nextTick

在vue2中使用nextTick等待组件时,使用Vue.nextTick();而在vue3改为全局api调用,且可以使用async/await修饰符修饰。

import { nextTick } from 'vue'

nextTick(() => {})
async function test(){
    await nexTick();
}

在vue3官方文档中描述vue2使用所带来的影响是这样的

直接调用 Vue.nextTick() 将导致臭名昭著的 undefined is not a function 错误。
通过这一更改,如果模块绑定器支持 tree-shaking,则 Vue 应用程序中未使用的全局 api 将从最终捆绑包中消除,从而获得最佳的文件大小。

也就是说某些时候组件未加载完就运行了nexttick里的方法。
另外其他改变的api有

image.png
以及受影响的vue2api

image.png

组合式api

响应式基础

在vue3中可以使用reactive创建一个响应式对象,也就是可以双向绑定的对象,也相当于在data中定义一个对象。

import { reactive } from 'vue'

const state = reactive({
  test: 'hlleo'
})

而另一个方法ref也可以创建响应式数据,它用于简单类型的定义。不过改变他的值需要使用其value属性才行。

import { ref } from 'vue'
const test = ref(0)
function change(){
    test.value = 1;
}

setup

在vue3中不建议使用reated、computed、filter等函数。而建议使用setup函数来代替它做初始化的工作。定义在其中的方法和变量都会被初始化。一般配合响应式数据使用,下面是实际开发中国的一个例子:


<template>
  <div>{{test}}</div>
  <voice v-if="viewVoice" ref="refVioce"></voice>
</template>

<script>
import Voice from "./voice.vue";
import { reactive, toRefs, ref, nextTick } from "vue";
export default {
  components: {
    Voice
  },
  setup() {
    const state = reactive({
      viewVoice: false,
      test: 'hello'
    });
    //通过ref获取节点
    const refVioce = ref(null);

    function voiceHandle(data) {
      state.viewVoice = !state.viewVoice;
      nextTick(() => {
        if (state.viewVoice) refVioce.value.setData(data);
      });
    }
    
    return {
      ...toRefs(state),//不清除响应式的情况下解构对象
      refVioce
    };
  },
};
</script>
  • 在vue3 获取节点的方式也变了,需要定义一个ref去接受dom节点,变量名对应ref的名字。并且在setup中把变量返回出去。
  • 在setup没有this,但他有二个参数props和ctx一个是可以获取父组件中传递的参数,一个是函数的上下文。一般在使用props参数时,我们一般使用torefs函数解构。

setup中生命周期钩子

同样vue3为了迎合组合式api,将生命周期函数也做了添加。在setup中可以使用如下生命周期函数。eg:

import { onMounted} from "vue";

export default {
  setup() {
    // mounted
    onMounted(() => {
      console.log('Component is mounted!')
    })
  }
}

image.png
有时间将继续更新有关vue-router、vuex相关的内容

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3 是一个流行的 JavaScript 框架,用于构建用户界面。它是 Vue.js 的最新版本,带来了许多新的特性和改进。 要从入门到精通 Vue 3,你可以按照以下步骤进行学习: 1. 了解基础概念:首先,你需要了解 Vue 3 的核心概念,如组件、指令、生命周期等。Vue 官方文档是一个很好的起点,你可以在官网上找到详细的文档和教程。 2. 安装 Vue 3:使用 npm 或 yarn 安装 Vue 3,并创建一个新的 Vue 3 项目。你可以使用 Vue CLI,这是一个官方提供的命令行工具,可以帮助你快速搭建 Vue 3 项目。 3. 学习基本语法:学习 Vue 3 的基本语法是入门的关键步骤。掌握如何创建组件、使用模板语法、定义数据和方法等。 4. 理解响应式数据:Vue 3 引入了一个全新的响应式系统,使用 `reactive` 函数来跟踪数据的变化。学习如何使用响应式数据,以及如何在组件中进行状态管理。 5. 掌握组件通信:理解 Vue 3 中组件之间的通信方式,包括 props、自定义事件、provide/inject 等。 6. 学习 Vue 3 的高级特性:学习 Vue 3 中的动态组件、插槽、异步组件等高级特性,可以让你更好地构建复杂的应用程序。 7. 探索 Vue 3 生态系统:Vue 3 生态系统提供了很多有用的库和工具,如 Vue Router、Vuex 等。了解并学习如何使用这些工具,可以帮助你更好地构建应用程序。 8. 实践项目:通过实际项目的练习,将所学的知识应用到实践中。尝试构建一个小型的 Vue 3 应用程序,以加深对 Vue 3 的理解和掌握。 总之,学习 Vue 3 需要持续的实践和不断地学习,通过阅读官方文档、参与社区讨论等方式,你可以逐渐提高自己的技能,并最终精通 Vue 3。祝你学习愉快!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值