首页 > 其他分享 >vue3开发文档

vue3开发文档

时间:2024-03-09 22:45:31浏览次数:18  
标签:Vue 对象 数据 监视 reactive 开发 文档 vue3 ref

技术要求

TypeScript
Vue3
1、用Vue+Vue-Router做一个展示网站。网站按页面划分模块,每个页面按section(部分)再划分模块。培养自己的模块化思想。
2、用Vue+Vue-Router+Axios做一个带请求的网站。把请求结果放在页面上展示出来。锻炼请求接口的能力,了解前后端分离思想。
3、用Vue+Vue-Router+Axios+Vuex做一个能管理数据的网站。把请求放到Vuex中,用store管理数据。搞懂Vuex在开发中的帮助,提升项目开发能力。

做完上面三步你就已经入门Vue了,接下来就可以用这个最佳实践来构建更优雅的代码、组织更简洁的项目。

命令

pnpm create vue@latest

# 在项目目录下
npm outdated # 查看已过时的包
npm update # 更新包

基本语法

console.log('123') //ts里用单引号?1

响应式数据

ref基本类型的响应式数据

  • 其实 ref接收的数据可以是:基本类型对象类型
  • ref接收的是对象类型,内部其实也是调用了 reactive函数。
let xxx = ref(初始值)
// 一个RefImpl的实例对象,简称ref对象或ref,ref对象的value属性是响应式的

注意:

  • JS中操作数据需要:xxx.value,但模板中不需要 .value,直接使用即可。
  • 对于 let name = ref('张三')来说,name不是响应式的,name.value是响应式的

reactive:对象类型的响应式数据

基本类型不要用它,要用 ref,否则报错

let 响应式对象= reactive(源对象) //响应式对象
// 返回值:一个Proxy的实例对象,简称:响应式对象。

reactive定义的响应式数据是“深层次”的。

reactive重新分配一个新对象,会失去响应式

<template> 
	<h2>汽车信息:一台{{ car.brand }}汽车,价值{{ car.price }}万</h2>
	<h2>汽车信息:一台{{ car1.brand }}汽车,价值{{ car1.price }}万</h2>
</template>

<script lang="ts" setup name="Person">
import { ref,reactive } from 'vue'
let car=reactive({brand:'奔驰',price:100})
let car1=ref({brand:'本田',price:100})
function changeCar(){
	car={brand:'奥迪',price:1}; //不会更新
	car=reactive({brand:'奥迪',price:1}); //不会更新
	Object.assign(car,{brand:'奥迪',price:1}); //可以操作reactive
	car1.value={brand:'奥迪',price:1} //可以操作ref
}
</script>

computed

作用:根据已有数据计算出新数据(和 Vue2中的 computed作用一致)。

watch

  • 作用:监视数据的变化(和 Vue2中的 watch作用一致)
  • 特点:Vue3中的 watch只能监视以下四种数据
  1. ref定义的数据。
  2. reactive定义的数据。
  3. 函数返回一个值(getter函数)。
  4. 一个包含上述内容的数组。

情况一:监视 ref定义的【基本类型】数据:直接写数据名即可,监视的是其 value值的改变。

<template>
  <h1>情况一:监视【ref】定义的【基本类型】数据</h1>
  <h2>当前求和为:{{ sum }}</h2>
  <button @click="changeSum">点我sum+1</button>
</template>
<script lang="ts" setup>
import {ref, watch} from 'vue'
  let sum = ref(0)
  function changeSum(){
    sum.value+=1
  }
  // 监视,情况一:监视【ref】定义的【基本类型】数据
  const stopWatch= watch(sum,(newValue,oldValue)=>{
      console.log('sum变化了',newValue,oldValue)
      if(newValue>=10){
        stopWatch()
      }
})
</script>

情况二

监视 ref定义的【对象类型】数据:直接写数据名,监视的是对象的【地址值】,若想监视对象内部的数据,要手动开启深度监视。

注意:

  • 若修改的是 ref定义的对象中的属性,newValueoldValue 都是新值,因为它们是同一个对象。
  • 若修改整个 ref定义的对象,newValue 是新值, oldValue 是旧值,因为不是同一个对象了。

情况三

监视 reactive定义的【对象类型】数据,且默认开启了深度监视。

情况四

监视 refreactive定义的【对象类型】数据中的某个属性,注意点如下:

  1. 若该属性值不是【对象类型】,需要写成函数形式。
  2. 若该属性值是依然是【对象类型】,可直接编,也可写成函数,建议写成函数。

结论:监视的要是对象里的属性,那么最好写函数式,注意点:若是对象监视的是地址值,需要关注对象内部,需要手动开启深度监视。

情况五

监视上述的多个数据

传递数据

props


生命周期

Vue 组件实例在创建时要经历一系列的初始化步骤,在此过程中 Vue 会在合适的时机,调用特定的函数,从而让开发者有机会在特定阶段运行自己的代码,这些特定的函数统称为:生命周期钩子。

生命周期整体分为四个阶段,分别是:创建、挂载、更新、销毁,每个阶段都有两个钩子,一前一后。

创建阶段: setup
挂载阶段: onBeforeMount 、 onMounted
更新阶段: onBeforeUpdate 、 onUpdated
卸载阶段: onBeforeUnmount 、 onUnmounted

路由

安装路由router插件

npm i vue-router

pinia

安装pinia插件

npm install pinia
// 操作src/main.ts
import {createPinia} from 'pinia'  //引入pinia
const pinia = createPinia() // 创建pinia
app.use(pinia) //使用插件

axios

安装axios插件

npm i axios

标签:Vue,对象,数据,监视,reactive,开发,文档,vue3,ref
From: https://www.cnblogs.com/yuey6670/p/18057298

相关文章

  • UnrealSharp: 一个可以让你在UnrealEngine5中采用C# 12和.NET 8.0开发的插件
    写着玩的,就当学习Unreal练手的玩意儿了。主要特性:支持.NET6.0~.NET8.0[默认为.NET8.0],支持C#12支持在C#中创建新的Unreal类、Unreal结构、Unreal枚举等支持为C#类创建新的Unreal属性、Unreal函数和Unreal多播委托。支持C#类继承UnrealC++类,这意味着您可以......
  • 安卓开发学习-向上一个Activity返回数据
    发送请求页面点击查看代码packagecom.android.response;importandroid.content.Intent;importandroid.os.Bundle;importandroid.widget.Button;importandroid.widget.TextView;importandroidx.activity.result.ActivityResultLauncher;importandroidx.activity.......
  • 【前端Vue】Vue从0基础完整教程第1篇:vue基本概念,vue-cli的使用【附代码文档】
    Vue从0基础到大神学习完整教程完整教程(附代码资料)主要内容讲述:vue基本概念,vue-cli的使用,vue的插值表达式,{{gaga}},{{if(obj.age>18){}}},vue指令,综合案例-文章标题编辑vue介绍,开发vue的方式,基本使用,如何覆盖webpack配置,目录分析与清理,vue单文件组件的说明,vue通......
  • 安卓开发学习-Intent携带数据
    发送数据页面点击查看代码packagecom.android.messaging;importandroid.annotation.SuppressLint;importandroid.content.Intent;importandroid.os.Bundle;importandroid.widget.Button;importandroid.widget.TextView;importandroidx.appcompat.app.AppCompatA......
  • python Ai 应用开发基础训练,字符串,字典,文件
    --------------------------------------  编程能是大模型应用的天花板..................................................................所以要好好将大模型应用在企业一定要好好练好最看不起的一环,基础能力字符串处理 本文档来自老男孩培训Alex课程记录,我在2017年......
  • 【Python使用】python高级进阶知识md总结第1篇:My Awesome Book【附代码文档】
    python高级进阶全知识知识笔记总结完整教程(附代码资料)主要内容讲述:MyAwesomeBook,MyAwesomeBook。MyAwesomeBook,MySQL数据库。MyAwesomeBook,聚合函数。MyAwesomeBook,创建表并给某个字段添加数据。MyAwesomeBook,闭包。MyAwesomeBook,路由列表功能开发。MyAwesomeBoo......
  • C++ Qt开发:QNetworkInterface网络接口组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QNetworkInterface组件实现查询详细的网络接口参数。在Qt网络编程中,QNetworkInterface是......
  • Java入门(Java诞生、特性、版本、开发环境搭建)
    Java入门1.Java帝国的诞生—一场旷日持久的战争(1)1972年C语言诞生:贴近硬件,运行极快,效率极高;应用于:操作系统、编译器、数据库、网路系统等;难点:指针和内存管理;(2)1982年C++诞生:面向对象;兼容C语言;应用于:图像领域、游戏等;(3)Java帝国的诞生:1995年Java诞生:网页简单而粗糙......
  • 直播app开发,实现具备可扩展性代码的关键
    在直播app开发过程中,会经常碰到这么一些需求,比如在在主流程执行前,要做一些前置事件,在主流程执行之后,做一些收尾工作。对一些新手程序员,他可能会直接写类似如下的代码publicvoidexecute(){doBefore();doBiz();doAfter();} 对有一定......
  • APP开发
    原生APP原生App是专门为特定手机平台开发的应用程序,无法在其他平台运行。一个手机软件如果要同时支持苹果手机和安卓手机,就需要为它们各写一个原生App。webappWebApp是使用网页做的应用程序,必须在浏览器中使用。比如,你在浏览器中收发邮件,就是在使用WebApp。混合型a......