vue3.0,setup()的使用,Composition Api(组合式api)data,computed,methods,watch

news/2024/7/19 13:49:57 标签: js, vue.js, vue3.0

vue3.0项目创建好之后,来看看一个简单组件内的代码顺便介绍几个特点:

1.组合式api就是指把vue2.0中的 datacomputedmethodswatch都集中在3.0中的setup()中
2.setup取代beforeCreatecreated这两个周期,也就是原本放在这两个钩子的内容现在放在setup中
3.在setup里无法再使用this,因为在执行setup的时候组件实例还没创建成功(setup执行在beforeCreate之前)。
4.接收两个参数propscontext(具体的后面讲)
5.代码可读性更高,维护也更方便。当然也完美兼容vue2.x

<template>
  <div class="home">
	{{user.name}}--{{user.age}}--{{num}}--{{doubleCount}}
	<button @click="change"></button>
  </div>
</template>

<script>
import { ref, reactive, computed, watch} from 'vue'
export default {
  name: 'Home',
  setup () {
  	const user = reactive({ name: 'jerry', age: 18}) // 创建引用类型数据使用reactive
  	const num = ref(6)	// 创建基础数据类型使用ref,使用是用.vulue
	const doubleCount = computed(() => {
      	return num.value * 2
    })
    // watch的单个值写法,第一个参数是一个getter函数,该函数返回一个响应式对象,要响应式。
    watch(() => num.value, (newValue, old) => {
    	// newValue新值,old旧值
    	console.log(newValue, old, '--w')
    })
    // watch的多个值写法
    /* const num1 = ref(11)
    watch([count, count1], ([newCount, newCount2], [oldCount, oldCount2]) => {
      console.log([newCount, newCount2], '--', [oldCount, oldCount2], '--w')
    })
     watch(() => user, (newValue, oldValue) => {
    	console.log(newValue, oldValue)
  	}, { deep: true }) // 深入监听user对象内部变化
    watch([count, count1], (newValue, oldValue) => {
     	console.log(newValue)// [newCount, newCount2]
      	console.log(oldValue)// [oldCount, oldCount2]
    }) */
    const change = () => {
      	num.value++
    }
    return {
    	user, 
    	num,
    	doubleCount,
    	change
    }
  },
  created () {
  	// vue2.0的内容也还是可以照常用的
  }
}
</script>

setup()的两个参数

<script>
import { toRefs, toRef } from 'vue'
export default {
  name: 'Home',
  // 因为props是响应性的,使用解构后会消除其响应性,所以需要使用toRefs, toRef
  // 但是context不具有响应性,可以直接使用解构赋值,但是只能访问attrs, slots, emit, expose
  setup (props, context) {
    const { name } = toRefs(props)
    const { name0 } = toRef(props, 'jerry') // toRef的第二个参数就类似于函数形参的默认值
   	const {attrs, slots, emit, expose} = context // 可以打印出来自己去看这几个属性
   	return {
    }
  }
}
</script>

方便维护,便于理解
这样看就不会像vue2.0那样,在维护的时候想要查询某个变量的逻辑,要去data,watch,methos等等里面去找,代码一多,眼睛都给你看画,脑壳看痛

<script>
import { ref, reactive } from 'vue'
export default {
  name: 'Home',
  setup (props, context) {
	const num = ref(0)
	/*
	.
	.这里都是对num的操作代码
	.
	*/
	
	const user = reactive({name: 'jerry'})
	/*
	.
	.这里都是对user的操作代码
	.
	*/
   	return {
    }
  }
}
</script>

http://www.niftyadmin.cn/n/1064874.html

相关文章

JS 通过字符串调用方法(函数)

//定义每个要执行的方法&#xff1a;var JsonUnitFunc { "组织": "aaa"};var name "组织";if (Object.keys(JsonFunc).indexOf(name) > 0) {//********执行单位专用方法********window[JsonFunc[name]]("1243"); //window["…

python 中定义的函数 如何在main中调用_Python如何在main中调用函数内的函数方式...

一般在Python中在函数中定义的函数是不能直接调用的&#xff0c;但是如果要用的话怎么办呢&#xff1f; 一般情况下&#xff1a;def a():#第一层函数 def b():#第二层函数 print(打开文件B) b()#第二层中的函数直接调用 结果显示&#xff1a;Traceback (most recent call last)…

JS算法与数据结构之八皇后(晕晕)

算法核心思想 回溯算法 递归实现 程序实现 坐标系 循环递归 回溯 计数 收集位置 特效添加 <!DOCTYPE HTML> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"> <title>无标题文档</title…

【35】java里的抽象类

1 abstract class Instrument {//抽象类 2 int i; 3 public abstract void play(); 4 public String what(){ 5 return "Instrument"; 6 } 7 public abstract void adjust(); 8 } 9 10 class Wind extends Instrument{11 public voi…

js 获取url携带参数

//获取url 携带的参数 // 比如URL url是这样的&#xff1a; // HYQuotationsCard.html?ID1&name2 // 利用这个方法 如何获取&#xff1a;var id GetUrlParam()["ID"]; function GetUrlParam() {var urlparam window.location.search.split("?")[1…

n个最小公倍数

给你一个正整数list L, 如 L[2,8,3,50], 求列表中所有数的最小公倍数(不用考虑溢出问题&#xff09;。 如L[3,5,10], 则输出30一个个求解&#xff0c;将第一&#xff0c;二个求出来放在第二个&#xff0c;再将第二个和第三个求出来放在第三个&#xff0c;以此类推。 # -*- codi…

vue3.0,vue-router的简单使用

createWebHistory路由模式路径不带#号(生产环境下不能直接访问项目&#xff0c;需要nginx转发) createWebHashHistory路由模式路径带#号 /* router/index.js */ import { createRouter, createWebHashHistory } from vue-router import Home from ../views/Home.vueconst rout…

ios 图片裁剪修改尺寸的方法总结

目前使用过的图片裁剪方法 1、等比例压缩 裁剪出的图片是以asize最小值为边框的正方形图片 //修改图片尺寸 同比缩放 (UIImage *)thumbnailWithImageWithoutScale:(UIImage *)image size:(CGSize)asize { UIImage *newimage; if (nil image) { newimage nil; } else{ …