• vue3学习笔记(1)


        Vue3.0在2019年年末就公布了源码,2020年年末正式发行。目前位置已经在大多数公司渐渐投入使用。本篇文章就来介绍一下Vue3.0的使用以及和Vue2.x的区别。

       一、vue3的介绍

            先附上官方文档:     介绍 | Vue.js

            xmind思维导图:

    vue3的改变,可以查看官方文档包含以下新功能,最主要的功能是新增了一个叫做组合式API(composition Api)的功能。而Vue2的功能在Vue3的使用过程中全都适用。

    核心的一点是响应式原理发生了改变,vue2的响应式原理是使用了ES5的Object.defineProperty()来实现的,也叫作浅响应式 ,因为他不能监听到数组、数组长度等的改变。而Vue3.0则更换为ES6的proxy代理模式,解决了这一问题。

     二、vue3的语法

    按照以上思维导图的顺序展开来讲vue3

    1. 组合式api——setup

    setup是Vue3新增的一个配置项,Vue2中data定义的数据和methods定义的方法,以及钩子函数,都可以写到setup方法里,最后通过return暴露出去使用。

    1. <script>
    2. export default {
    3. setup() {
    4. // 定义响应式数据
    5. const name = reactive("Jevin");
    6. // 定义方法
    7. function fn(n) {
    8. alert(n);
    9. }
    10. // 暴露出去使用
    11. return {
    12. name,
    13. fn
    14. };
    15. },
    16. };
    17. script>

    另外setup有两个参数setup(props,context),

            props就是接收父组件传过来的参数的,props 是响应式的,当传入新的 prop 时,它将被更新。但是,因为 props 是响应式的,你不能使用 ES6 解构,它会消除 prop 的响应性。

    如果需要解构 prop,可以在 setup 函数中使用 toRefs 函数来完成此操作:

    1. import { toRefs } from 'vue'
    2. setup(props) {
    3. const { title } = toRefs(props)
    4. console.log(title.value)
    5. }

    如果 title 是可选的 prop,则传入的 props 中可能没有 title 。在这种情况下,toRefs 将不会为 title 创建一个 ref 。你需要使用 toRef 替代它:

    1. import { toRef } from 'vue'
    2. setup(props) {
    3. const title = toRef(props, 'title')
    4. console.log(title.value)
    5. }

            传递给 setup 函数的第二个参数是 context。context是上下文的意思。它 是一个普通 JavaScript 对象,暴露了其它可能在 setup 中有用的值:

    1. export default {
    2. setup(props, context) {
    3. // Attribute (非响应式对象,等同于 $attrs)
    4. console.log(context.attrs)
    5. // 插槽 (非响应式对象,等同于 $slots)
    6. console.log(context.slots)
    7. // 触发事件 (方法,等同于 $emit)
    8. console.log(context.emit)
    9. // 暴露公共 property (函数)
    10. console.log(context.expose)
    11. }
    12. }

    context 是一个普通的 JavaScript 对象,也就是说,它不是响应式的,这意味着你可以安全地对 context 使用 ES6 解构。

    1. export default {
    2. setup(props, { attrs, slots, emit, expose }) {
    3. ...
    4. }
    5. }

    2.reactive-ref数据定义
        vue3的componsition Api中提供了两种定义响应式数据的方式reactive和ref

         reactive --- setup内部使用

         ref --- 外部用,可以使用toRefs将reactive定义的变量转变为ref类型

    1. <template>
    2. <div>
    3. <button @click="setCount">+button>
    4. <p> {{count}} p>
    5. div>
    6. template>
    7. <script>
    8. import {reactive, ref} from 'vue'
    9. export default{
    10. setup(){
    11. // const state=reactive({
    12. // count:0
    13. // })
    14. const count=ref(0)
    15. const setCount=()=>{
    16. // state.count++
    17. count.value++
    18. }
    19. return{
    20. // state,
    21. count,
    22. setCount
    23. }
    24. }
    25. }
    26. script>

    运行结果都如图所示:点击数字++

    3.isRef(判断类型是否是ref)

       toRefs 用于将reactive数据转换成ref数据,这样我们就可以在外部更改了

    1. <script>
    2. import {ref,reactive,isRef} from 'vue'
    3. export default {
    4. setup () {
    5. const state = reactive({
    6. money: 2000
    7. })
    8. const obj = ref({
    9. name: 'Jevin'
    10. })
    11. console.log(isRef(state)) //false
    12. console.log(isRef(obj)) //true
    13. }
    14. }
    15. script>

     toRefs转变前后

    1. <template>
    2. <div>
    3. <button @click="increment">+button>
    4. <p>{{ count }}p>
    5. div>
    6. template>
    7. <script>
    8. import { reactive, toRefs } from "vue";
    9. export default {
    10. setup() {
    11. const state = reactive({
    12. count: 1
    13. });
    14. const increment = () => {
    15. state.count++;
    16. };
    17. return {
    18. // state,
    19. ...toRefs(state),
    20. increment
    21. };
    22. }
    23. };
    24. script>

    下篇文章再讲述计算属性、侦听属性以及组件传参等内容。

    后续已发,入口地址:

    Vue3学习笔记(2)_liuwenjie_的博客-CSDN博客

    前端之家企鹅群:610408494

    微信:https://s1.ax1x.com/2022/07/18/jo1LyF.png

  • 相关阅读:
    常用损失函数详解:广泛使用的优化约束方法
    技术分享 | orchestrator--运维--配置集群自动切换&测试
    企业电子招投标采购系统源码之电子招投标的组成
    智谱API调用
    一、Unity环境安装
    【draw】draw.io怎么设置默认字体大小
    解析虚拟文件系统的调用
    PDF格式分析(八十)——弹出、文件附件注释(Popup、FileAttachment)
    SSM篇目录总结
    exceljs库实现excel表样式定制化
  • 原文地址:https://blog.csdn.net/liuwenjie_/article/details/125797843