首页 > 其他分享 >Vue进阶用法4

Vue进阶用法4

时间:2023-08-01 22:26:06浏览次数:39  
标签:Vue 进阶 age value 用法 vue let setup name

Vue进阶用法4

vue3介绍

1.性能的提升
    打包大小减少41%
    初次渲染快55%, 更新渲染快133%
    内存减少54%
2.源码的升级
    使用Proxy代替defineProperty实现响应式
    重写虚拟DOM的实现和Tree-Shaking
3.拥抱TypeScript
    Vue3可以更好的支持TypeScript
4.新的特性
    Composition API(组合API)
        setup配置
        ref与reactive
        watch与watchEffect
        provide与inject
    新的内置组件
        Fragment
        Teleport
        Suspense
    其他改变
        新的生命周期钩子
        data 选项应始终被声明为一个函数
        移除keyCode支持作为 v-on 的修饰符

5 组合式API和配置项API
	-使用组合式API
    -配置项API
    	-{
            name:'xx',
            data:function(){},
            methods:{}
        }

创建vue3项目的两种方式

# vue-cli:创建vue2和vue3   
	-跟之前一样
# vite:创建vue3,创建最新
	npm init vue@latest
    # Pinai
# vite创建另一种方式:创建vue3.0.4版本
    npm init vite-app <project-name>
    ## 进入工程目录
    cd <project-name>
    ## 安装依赖
    npm install
    ## 运行
    npm run dev
    
# 启动的两种方式


# 以后再页面中的this,已经不是vue2中的vc对象了,是一个代理对象

setup函数

# vue 新增的setup配置项函数,
	-在里面可以定义变量
    -定义函数
    -必须return 变量和函数,在模板中才能使用
<template>
  <h2>{{ name }}</h2>
  <h3>{{ age }}</h3>
  <button @click="handleClick">点我看美女</button>
  <br>
  <button @click="handleAdd">点我,age+1</button>
</template>

<script>


export default {
  name: 'App',
  setup() {   // setup中没有this了
    // 以后所有的变量定义函数编写,都写在这个函数中
    // 定义变量 如果这么写,变量渲染没问题,但是没有响应式,页面变了,变量不会变
    let age = 19
    let name = 'lqz'
    // 定义函数
    function handleClick() {
      alert('美女~~~')
    }
    let handleAdd = () => {
      console.log('我要开始加了')
      age=age+1
      console.log(age)
    }
    // 函数必须有返回值
    return {
      age, name, handleClick, handleAdd
    }

  }
}
</script>


ref和reactive

# 导入使用:import {ref, reactive} from 'vue'
#  基本数据类型(数字,字符串,布尔)如果要加响应式:使用ref包裹,在模板中之间使用,js中通过对象.value取值
#  对象,数组引用使用reactive,ref可以包对象类型,但是用的时候必须.value
<template>
  <h2>{{ name }}</h2>
  <h3>{{ age }}</h3>
  <br>
  <button @click="handleAdd">点我,age+1</button>
  <br>
  <button @click="handleChangeName">点我name变化</button>
</template>

<script>

import {ref, reactive} from 'vue'

export default {
  name: 'App',
  setup() {
    let age = ref(19) // age 已经不是数字了,是RefImpl的对象
    let name = ref('lqz')
    let handleAdd = () => {
      console.log('我要开始加了,age是', age)
      age.value = age.value + 1
      console.log('我要开始加了,age是', age.value)
    }
    function handleChangeName(){
      name.value=name.value+'?'
      console.log(name)
    }

    return {
      age, name, handleClick, handleAdd,handleChangeName
    }

  }
}
</script>


计算和监听属性

计算属性

export default {
  name: 'App',
  // computed:{
  //   fullName:function (){}
  // },
  setup() {
    // 1 计算属性案例1
    // let firstName = ref('李')
    // let lastName = ref('明熠')
    // // 定义计算属性
    // let fullName = computed(() => {
    //   return firstName.value + lastName.value
    // })

    // 2 计算属性案例2
    let person = reactive({
      firstName: '李',
      lastName: '明熠',
    })
    // 定义计算属性
    person.fullName = computed({
      get() {
        return person.firstName + '-' + person.lastName
      },
      set(value) {
        console.log(value)
        const nameArr = value.split('-')
        person.firstName = nameArr[0]
        person.lastName = nameArr[1]

      }
    })
    return {
      person
    }


  }
}

监听属性

import {computed, watch, ref, reactive, watchEffect} from 'vue'

export default {
  name: 'App',
  setup() {
    // 1 计算属性案例1
    let name = ref('lqz')

    // 定义监听属性
    watch(name, (newValue, old) => {
      console.log('name变了')
      // console.log(old)
      // console.log(newValue)
    })
    // vue3 多的watchEffect,只要函数中使用的变量发生变化,它就会触发
    watchEffect(() => {
      // 只要该函数中使用的变量发生变化,它就会触发
      // let a = name.value + '?'
      console.log('watchEffect配置的回调执行了')
    })
    return {
      name
    }


  }
}

生命周期

# Vue3.0中可以继续使用Vue2.x中的生命周期钩子,但有有两个被更名:
        beforeDestroy改名为 beforeUnmount
        destroyed改名为 unmounted
# Vue3.0也提供了 Composition API 形式的生命周期钩子,与Vue2.x中钩子对应关系如下:
        beforeCreate===>setup()
        created=======>setup()
        beforeMount ===>onBeforeMount
        mounted=======>onMounted
        beforeUpdate===>onBeforeUpdate
        updated =======>onUpdated
        beforeUnmount ==>onBeforeUnmount
        unmounted =====>onUnmounted

hooks

# 什么是hook?—— 
本质是一个函数,把setup函数中使用的Composition API进行了封装。
类似于vue2.x中的mixin。
自定义hook的优势: 复用代码, 让setup中的逻辑更清楚易懂

hook/usePoint.js

import {onMounted, onUnmounted, reactive} from "vue";

export default function () {
    let p = reactive({
        x: 0,
        y: 0
    })

    function getPoint(event) {
        console.log(event)
        p.x = event.pageX
        p.y = event.pageY
    }

    // 声明周期钩子的onMounted,当页面挂载就会执行
    onMounted(() => {
        // 给数鼠标点击增加监听,当点击鼠标,就会执行这个函数
        window.addEventListener('click', getPoint)
    })
    // 组件被销毁时,把功能去掉
    onUnmounted(() => {
        window.removeEventListener('click', getPoint)
    })

    return p
}

在想使用的组件中引入使用即可

<template>
  <h2>x坐标是:{{ p.x }},y坐标是:{{ p.y }}</h2>
</template>

<script>
import {reactive, onMounted, onUnmounted} from 'vue'
import usePoint from '../hook/uesPoint.js'

export default {
  name: "Point",
  setup() {
    let p = usePoint()
    return {p}
  }
}

</script>

<style scoped>

</style>

toRefs

# setup函数,return {...toRefs(data)}可以解压复制
export default {
  name: 'App',

  setup() {
    let data = reactive({
      name: 'lqz',
      age: 19,
      isShow: true
    })

    function handleShow() {
      console.log('ssdaf')
      data.isShow = !data.isShow
      data.age++
    }

    return {
      ...toRefs(data),
      handleShow
      // data
    }

  }
}

后台管理模板

# vue-admin-template-master
	-跑起来
	-package.json 第7行加入
    "dev": "set NODE_OPTIONS=--openssl-legacy-provider & vue-cli-service serve",

    
    
# java版的若依,带权限控制的后台管理模块
# python :django-vue-admin   
# python flask-vue-admin
# go:gin-vue-admin

标签:Vue,进阶,age,value,用法,vue,let,setup,name
From: https://www.cnblogs.com/joseph-bright/p/17599254.html

相关文章

  • Vue入门命令2
    Vue入门命令2表单控制#input:checkbox(单选,多选),radio(单选)<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><scriptsrc="./js/vue.js"></script......
  • Vue进阶用法1
    Vue进阶用法1计算属性#如果{{函数()}},每次页面刷新,函数都会重新执行#函数---》当属性来使用,缓存<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><scriptsrc="./js/vue.js"......
  • Vue进阶用法2
    Vue进阶用法2vue项目目录介绍myfirstvue#项目名字node_modules#文件夹,内部有很多当前项目依赖的模块,可以删除,npminstallpublic#文件夹-favicon.ico#网站小图标-index.html......
  • Vue进阶用法3
    Vue进阶用法3Vuex的使用#vue的插件,增强了vue的功能,在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信#Vuex的使用流程 -state:存数据的地址-actions:服务员,中转站......
  • Vue组件可以使用v-model实现双向数据绑定
    Vue组件可以使用v-model实现双向数据绑定。在组件中,可以在props中定义一个value属性,并在组件中的对应位置使用v-model进行绑定。例如:Copy<template><div><input:value="value"@input="$emit('input',$event.target.value)"></div></template......
  • 讲一讲我用vscode生成的Vue工程
    近照官网教程,先建立一个文件夹,然后用vscode打开,然后执行 npminitvue@latest命令出现页面我全部选择NO,那些组件用到之后再往进加,要么太乱了然后录入自己要创建的项目名称,我的名称起名myvue,注意项目名称不识别大写然后执行命令:cd myvue  再执行命令   npminstal......
  • vue3路由的两种引入方式useRouter和router进行页面跳转
    1.在vue3中有两种路由的引入方式第一种import{useRouter}from'vue-router'constuse_router=useRouter()use_router.push('/pathName')第二种importrouterfrom'@/router'router.push('/pathName') 2.两种方式的区别2.1.第一种方式的使用位置在vue......
  • JSON格式电商数据API接口,便捷式用法
    item_search-按关键字搜索商品请求参数注册Key和secret测试请求参数:q=女装&start_price=0&end_price=0&page=1&cat=0&discount_only=&sort=&page_size=40&seller_info=no&nick=&seller_info=&nick=&ppath=&imgid=&filter=参数说明:q:搜索关键字cat:......
  • PHPJSON解析 原理与用法
    PHPJSON解析原理与用法在现代编程语言中,JSON已经成为最流行的数据交换格式之一。而PHP作为一门流行的服务器端编程语言,自然也提供了一套完整的JSON解析库。本文将介绍PHPJSON解析的原理与用法,以帮助PHP开发者更好地使用JSON格式数据进行开发。什么是JSON?JSON代表“JavaScript......
  • v-model 用法详解
    基础用法v-model是vue的一个基础指令,用于表单的双向数据绑定<inputv-model="message"placeholder="editme"><p>Messageis:{{message}}</p>v-model原理一个组件上的v-model默认会利用名为value的prop和名为input的事件<inputv-model="searchText"......