初探Vue3

简介: 初探Vue3


🌜本 篇 文 章 目 录 \textcolor{green}{本篇文章目录} 🌛


🐵 新 构 建 工 具 V i t e \textcolor{blue}{新构建工具Vite}Vite


🐵 C o m p o s i t i o n A P I 火 爆 来 袭 \textcolor{blue}{Composition API火爆来袭}CompositionAPI


🐵 C o m p o s i t i o n A P I 的 基 本 使 用 \textcolor{blue}{Composition API的基本使用}CompositionAPI使


🐵 计 算 属 性 的 使 用 \textcolor{blue}{计算属性的使用}使


🐵 事 件 处 理 \textcolor{blue}{事件处理}


🐵 侦 听 器 \textcolor{blue}{侦听器}


🐵 引 用 对 象 : 单 个 原 始 值 响 应 化 \textcolor{blue}{引用对象:单个原始值响应化}


🐵 体 验 逻 辑 组 合 \textcolor{blue}{体验逻辑组合}

vite

如今Vue3出现后,搭建Vue项目的方式有三种,除了可以通过 vue-cli 和 webpack 搭建脚手架外 官方还提供了一种新的脚手架搭建工具 vite,前面两种方式我们并不陌生,我们重点来看一下Vite

Vite 是 Vue 作者开发的一款意图取代 webpack 的工具,实现原理是利用 ES6 的 import 会发送请求去加载文件的特性,拦截这些请求,做一些预编译,省去 webpack 冗长的打包时间

使用vite快速创建一款Vue3项目

使用vite创建vue3的步骤

npm install -g create-vite-app

create-vite-app vue3-demo

cd vue3-demo

npm install

创建目录如下

还是老样子我们看一下项目中的package.json

确实我们的项目中的vue版本是3,并且我们的运行以及打包都是依赖Vite,现在我们npm run dev看一下

就一个字 贼快!!!!! 下面我们看一下main.js文件

我们就发现了陌生而又熟悉的地方:

Vue3是通过createApp创建vue实例的而不是new

Vue2中的所有内容都是挂载到new出来的vue构造函数(跟实例)上面的

现在vue3都是挂再到app上面

关于Vite的相关内容我们暂时就介绍这么多,更多的内容大家可以在网上找到更多的资料

Composition API火爆来袭

Composition API字面意思是组合API,它是为了实现基于函数的逻辑复用机制而产生的。是Vue的一大亮点,和Vue2的区别我们下面揭晓

下面两张图让您直白的看出差距

在vue2中使用的统称为选项api(optionApi) 比如我们需要定义数据需要我们在data选项去定义,如果我们定义方法我们就需要在methods的选项下

Vue2所运用的option api的缺点:例如我们抽离一个很简单的组件 组建功能就是一个累加的功能,而vue抽离出去后的代码是分散的 我们需要在data中去定义一个num 然后我们需要在methods中去创建一个add方法,功能代码比较分散,这仅仅是一个小功能组件,如果是更复杂的逻辑呢?

Vue3中运用的是compostion Api运用的是一个功能就是一块代码,阅读性可维护性会更高些

Composition API的基本使用

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="../dist/vue.global.js"></script>
</head>
<body>
  <div id="app">
    <h1>Composition API</h1>
    <div>count: {{ state.count }}</div>
  </div>
  <script>
    const {
      createApp,
      reactive
    } = Vue;
    // 声明组件
    const App = {
      // setup是一个新的组件选项,它是组件内使用Composition API的入口
      // 调用时刻是初始化属性确定后,beforeCreate之前
      setup() {
        // 响应化:接收一个对象,返回一个响应式的代理对象
        const state = reactive({ count: 0 })
        // 返回对象将和渲染函数上下文合并
        return { state }
      }
    }
    createApp(App).mount('#app')
  </script>
</body>
</html>

计算属性的使用

<div>doubleCount: {{doubleCount}}</div>
const { computed } = Vue;
const App = {
  setup () {
    const state = reactive({
      count: 0,
      // computed()返回一个不可变的响应式引用对象
      // 它封装了getter的返回值
      doubleCount: computed(() => state.count * 2)
    })
  }
}

事件处理

<div @click="add">count: {{ state.count }}</div>
const App = {
  setup () {
    // setup中声明一个add函数
    function add () {
      state.count++
    }
    // 传入渲染函数上下文
    return { state, add }
  }
}

侦听器

const { watch } = Vue;
const App = {
  setup () {
    // state.count变化cb会执行
    // 常用方式还有watch(()=>state.count, cb)
    watch(() => {
      console.log('count变了:' + state.count);
    })
  }
}

引用对象:单个原始值响应化

<div>counter: {{ counter }}</div>
const { ref } = Vue;
const App = {
  setup () {
    // 返回响应式的Ref对象
    const counter = ref(1)
    setTimeout(() => {
      // 要修改对象的value
      counter.value++
    }, 1000);
    // 添加counter
    return { state, add, counter }
  }
}

体验逻辑组合

const { createApp, reactive, onMounted, onUnmounted, toRefs } = Vue;
// 鼠标位置侦听
function useMouse () {
  // 数据响应化
  const state = reactive({ x: 0, y: 0 })
  const update = e => {
    state.x = e.pageX
    state.y = e.pageY
  }
  onMounted(() => {
    window.addEventListener('mousemove', update)
  })
  onUnmounted(() => {
    window.removeEventListener('mousemove', update)
  })
  // 转换所有key为响应式数据
  return toRefs(state)
}
// 事件监测
function useTime () {
  const state = reactive({ time: new Date() })
  onMounted(() => {
    setInterval(() => {
      state.time = new Date()
    }, 1000)
  })
  return toRefs(state)
}
// 逻辑组合
const MyComp = {
  template: `
<div>x: {{ x }} y: {{ y }}</div>
<p>time: {{time}}</p>
`,
  setup () {
    // 使用鼠标逻辑
    const { x, y } = useMouse()
    // 使用时间逻辑
    const { time } = useTime()
    // 返回使用
    return { x, y, time }
  }
}
createApp().mount(MyComp, '#app')

想了解更多关注我,持续推送

原 创 不 易 , 还 希 望 各 位 大 佬 支 持 一 下 \textcolor{blue}{原创不易,还希望各位大佬支持一下}


👍 点 赞 , 你 的 认 可 是 我 创 作 的 动 力 ! \textcolor{green}{点赞,你的认可是我创作的动力!}


⭐️ 收 藏 , 你 的 青 睐 是 我 努 力 的 方 向 ! \textcolor{green}{收藏,你的青睐是我努力的方向!}


✏️ 评 论 , 你 的 意 见 是 我 进 步 的 财 富 ! \textcolor{green}{评论,你的意见是我进步的财富!}


相关文章
|
2月前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
140 64
|
2月前
|
JavaScript 前端开发 API
Vue 3 中 v-model 与 Vue 2 中 v-model 的区别是什么?
总的来说,Vue 3 中的 `v-model` 在灵活性、与组合式 API 的结合、对自定义组件的支持等方面都有了明显的提升和改进,使其更适应现代前端开发的需求和趋势。但需要注意的是,在迁移过程中可能需要对一些代码进行调整和适配。
114 60
|
9天前
|
JavaScript API 数据处理
vue3使用pinia中的actions,需要调用接口的话
通过上述步骤,您可以在Vue 3中使用Pinia和actions来管理状态并调用API接口。Pinia的简洁设计使得状态管理和异步操作更加直观和易于维护。无论是安装配置、创建Store还是在组件中使用Store,都能轻松实现高效的状态管理和数据处理。
38 3
|
2月前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
39 8
|
2月前
|
存储 JavaScript 数据管理
除了provide/inject,Vue3中还有哪些方式可以避免v-model的循环引用?
需要注意的是,在实际开发中,应根据具体的项目需求和组件结构来选择合适的方式来避免`v-model`的循环引用。同时,要综合考虑代码的可读性、可维护性和性能等因素,以确保系统的稳定和高效运行。
32 1
|
2月前
|
JavaScript
Vue3中使用provide/inject来避免v-model的循环引用
`provide`和`inject`是 Vue 3 中非常有用的特性,在处理一些复杂的组件间通信问题时,可以提供一种灵活的解决方案。通过合理使用它们,可以帮助我们更好地避免`v-model`的循环引用问题,提高代码的质量和可维护性。
42 1
|
2月前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
2月前
|
存储 JavaScript 前端开发
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
【10月更文挑战第21天】 vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
|
2月前
|
JavaScript 索引
Vue 3.x 版本中双向数据绑定的底层实现有哪些变化
从Vue 2.x的`Object.defineProperty`到Vue 3.x的`Proxy`,实现了更高效的数据劫持与响应式处理。`Proxy`不仅能够代理整个对象,动态响应属性的增删,还优化了嵌套对象的处理和依赖追踪,减少了不必要的视图更新,提升了性能。同时,Vue 3.x对数组的响应式处理也更加灵活,简化了开发流程。
|
2月前
|
JavaScript 前端开发 开发者
Vue 3中的Proxy
【10月更文挑战第23天】Vue 3中的`Proxy`为响应式系统带来了更强大、更灵活的功能,解决了Vue 2中响应式系统的一些局限性,同时在性能方面也有一定的提升,为开发者提供了更好的开发体验和性能保障。
80 7

热门文章

最新文章