首页 > 其他分享 >vue学习笔记

vue学习笔记

时间:2022-11-02 21:23:41浏览次数:60  
标签:vue console name setup 笔记 学习 age log

今日内容概要

  • vue3介绍
  • 创建vue3项目的方式
  • setup函数
  • ref和reactive
  • 计算和监听属性
  • 生命周期
  • hooks
  • toRefs
  • 后台管理模板

今日内容详细

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
    -setup() {
        let name = 'xx'
        function handleClick() {
            alert('美女~~~')
         }
        return {
            name, handleClick
        }
    }
    -配置项API
    -{
         name:'xx',
         data:function(){},
         methods:{}
      }

创建vue3项目的方式

# vue-cli:创建vue2和vue3
    vue create 项目名

# vite:创建vue3,创建最新
    npm init vue@latest

# vite创建另一种方式:创建vue3.0.4版本
    npm init vite-app <project-name>
    ## 进入工程目录
    cd <project-name>
    ## 安装依赖
    npm install
    ## 运行
    npm run dev

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

setup函数

vue3新增的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>{{ person.name }}</h2>
  <h2>{{ person.age }}</h2>
  <h3>{{ age }}</h3>
  <button @click="handleClick">点我name变化</button>
  <br>
  <button @click="handleAdd">点我,age+1</button>
</template>

<script>
import {ref, reactive} from 'vue'

export default {
  name: 'App',
  setup() {
    let person = reactive({
      name: 'wjl',
      age: '18',
    })
    let age = ref(19)

    // 定义函数
    function handleClick() {
      person.name = person.name + '?'
      console.log(person.name)
    }

    let handleAdd = () => {
      console.log('我要开始加了')
      age.value = age.value + 1
      console.log(age)
    }
    // 函数必须有返回值
    return {
      age, person, handleClick, handleAdd
    }
  }
}
</script>

计算和监听属性

计算属性代码演示:

<template>
  <h1>setup函数的参数</h1>
  <h3>案例一</h3>
  <input type="text" v-model="firstName">
  <br>
  <input type="text" v-model="lastName">
  <br>
  <input type="text" v-model="fullName">

  <h3>案例二</h3>
  <input type="text" v-model="person.firstName">
  <br>
  <input type="text" v-model="person.lastName">
  <br>
  <input type="text" v-model="person.fullName">
</template>

<script>
// 计算属性,监听属性
import {computed, ref, reactive} from 'vue'

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

    // 2 计算属性案例2
    let person = reactive({
      firstName: 'w',
      lastName: 'jl',
    })
    // 定义计算属性
    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 {
      firstName, lastName, fullName, person
    }
  }
}
</script>

监听属性代码演示:

<template>
  <h1>监听属性</h1>
  <hr>
  <input type="text" v-model="name">--->{{ name }}
</template>

<script>
// 监听属性
import {watch, ref, reactive, watchEffect} from 'vue'

export default {
  name: 'App',
  setup() {
    let name = ref('wjl')
    // 定义监听属性
    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
    }
  }
}
</script>

生命周期

# 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

App.vue

<template>
  <h1>生命周期</h1>
  <hr>
  <button @click="handleClick">点我消失</button>
  <HelloWorld v-if="show"></HelloWorld>
</template>

<script>
import HelloWorld from "./components/HelloWorld.vue";
import {ref} from 'vue'

export default {
  name: 'App',
  components: {HelloWorld},
  setup() {
    let show = ref(true)
    function handleClick() {
      show.value = !show.value
    }
    return {
      show, handleClick
    }
  }
}
</script>

HelloWorld.vue

<template>
  <h1>我是helloworld组件</h1>
</template>

<script>
import {onBeforeMount, onMounted, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted} from 'vue'

export default {
  name: 'HelloWorld',
  setup(context) {
    console.log('组合式api的beforeCreate')
    console.log('组合式api的created')
    onBeforeMount(() => {
      console.log('组合式api的onBeforeMount')
    })
    onMounted(() => {
      console.log('组合式api的onMounted')
    })
    onBeforeUpdate(() => {
      console.log('组合式api的onBeforeUpdate')
    })
    onBeforeUnmount(() => {
      console.log('组合式api的onBeforeUnmount')
    })
    onUnmounted(() => {
      console.log('组合式api的onUnmounted')
    })
  }
}
</script>

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)}可以解压复制

<template>
  <h1>toRefs</h1>
  <h1>人名是:{{ name }},年龄:{{ age }}</h1>
  <button @click="handleShow">点我显示取消</button>
  <div v-if="isShow">
    我是div
  </div>
</template>

<script>
// toRefs
import {toRefs, reactive} from 'vue'

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
    }
  }
}
// ...toRefs(data) 等同于:解压
</script>

后台管理模板

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

编程语言基于的二次开发后台管理软件:
java:java版的若依,带权限控制的后台管理模块
python:django-vue-admin
go:gin-vue-admin

标签:vue,console,name,setup,笔记,学习,age,log
From: https://www.cnblogs.com/wwjjll/p/16852493.html

相关文章

  • 待学习内容记录
    目录待学习内容cross-storage已学习内容--待学习内容cross-storage已学习内容--......
  • vite_vue3自动引入
    //github地址:https://github.com/antfu/unplugin-auto-import1.npmi-Dunplugin-auto-import2.vite.config.tsimportAutoImportfrom'unplugin-auto-import/vi......
  • 【2022-11-02】前端Vue框架(七)
    一、Vue3基本介绍1.性能的提升打包大小减少41%初次渲染快55%,更新渲染快133%内存减少54%2.源码的升级使用Proxy代替defineProperty实现响应式......
  • vue3
    目录回顾vue-router路由守卫vue3一、介绍二、创建vue3项目的两种方式三、setup函数vue3新增的setup配置项函数的特点此时的变量age值不能够和渲染的一样增减,因为没有响应......
  • OpenFlow:Enabling Innovation in Campus Networks论文学习
    一.可编程网络发展的背景 在过去日常生活中的网络技术设施几近僵化:已经大规模部署好的设备与协议与对在流量中进行网络实验开发的排斥,使得网络工程人员对于网络可以......
  • 日常笔记
    1.openresty+redis+lua缓存使用openresty+lua脚本实现多级缓存:用户访问openresty中的Nginx,若null则访问redis,若null则访问数据库,数据库返回信息并存储在redis,redis在存......
  • 学习笔记-pupy
    pupy免责声明本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.项目地址https://github.com/n1nj4sec/pupy相......
  • Doker学习01-Docker的基本概念
    Doker学习01-Docker的基本概念Docker概述Docker出现的原因一款产品有两个环境:开发(开发环境)和上线(运维环境)。环境配置和切换过于麻烦,每一台机器都要部署环境(集群Redis,E......
  • (动态列表滚动)vue-seamless-scroll的使用 实现列表滚动
    1.npm下载依赖npminstallvue-seamless-scroll--save2.在需要使用的页面引入importvueSeamlessScrollfrom'vue-seamless-scroll'components:{vueSea......
  • 学习笔记-merlin
    merlin免责声明本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.项目地址https://github.com/Ne0nd0g/merlin......