初识Vue3

182 阅读2分钟

官网

image.png

Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。

官网链接:cn.vuejs.org/

运行环境

线上

在vue官网的演练场中,可以直接运行vue代码

CDN

在页面中直接引入以下script标签

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>

通过 CDN 使用 Vue 时,不涉及“构建步骤”。这使得设置更加简单,并且可以用于增强静态的 HTML 或与后端框架集成。但是,你将无法使用单文件组件 (SFC) 语法。

Vue CLI

Vue CLI 是官方提供的基于 Webpack 的 Vue 工具链,它现在处于维护模式。我们建议使用 Vite 开始新的项目,除非你依赖特定的 Webpack 的特性。在大多数情况下,Vite 将提供更优秀的开发体验。

Vite

Vite 是一个轻量级的、速度极快的构建工具,对 Vue SFC 提供第一优先级支持。作者是尤雨溪,同时也是 Vue 的作者!

要使用 Vite 来创建一个 Vue 项目,非常简单:

$ npm init vue@latest

这个命令会安装和执行 create-vue,它是 Vue 提供的官方脚手架工具。跟随命令行的提示继续操作即可。

基本原理

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../vue.global.js"></script>
</head>

<body>
    <div id="box"></div>

    <script>
        const obj = {}
        const obox = document.getElementById("box")

        //  ------------------ vue2 --------------------
        // 缺陷:无法监听数组的改变, 无法监听class改变, 无法监听Map Set结构。
        /*  Object.defineProperty(obj, "myname", {
             get() {
                 console.log("get");
             },
             set(val) {
                 console.log("set", val);
                 // 操作dom
                 obox.innerHTML = val;
             }
         }) */

        //  ------------------ proxy代理 --------------------
        const vm = new Proxy(obj, {
            get(target, key) {
                console.log("get")
                return target[key]
            },
            set(target, key, value) {
                console.log("set")
                target[key] = value
                obox.innerHTML = value
            }
        })
        /*
        兼容写法:
            vue3 基于Proxy, ES6 Proxy,
                if (支持proxy) {
                // proxy进行拦截处理, 实现功能
            } else {
                // object.defineProtery
            }
        */

    </script>
</body>

</html>