VUE3(setup响应式函数系统API)

Posted 月疯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VUE3(setup响应式函数系统API)相关的知识,希望对你有一定的参考价值。

Vue3.0提供的一组具有响应式特性的杉树式API,以函数的形式提供
1、reactive
reactive()函数接收一个普通对象,返回该普通对象的响应式代理对象
2、ref
ref()函数接收一个参数值,返回一个响应式的数据对象。该对象只包含一个指向内部值的.value属性
3、computed
computed()函数用来创建计算属性,函数的返回值是一个ref的实例
4、readonly

readonly()函数接收一个对象(普通或者响应式),返回一个原始对象只读代理对象
5、watch
watch()函数用来监听数据的变化,从而出发特定的操作
6、watchEffect
watchEffect()函数接收一个函数作为参数,并立即执行该函数,同时响应式追踪其依赖,并在其依赖变更时,重新运行该函数。

 reactive.vue

<template>
	<div>
		<p>{{name}}</p>
		<button @click="name='juju'">修改name</button>
	</div>
</template>

<script>
	//1、导入reactive响应函数
	import { reactive } from 'vue'
	export default{
		setup(){
			//2、创建响应式对象,是一个代理对象
			const data=reactive({
				name:'htt',
				age:22
			})
			
			return data
		}
	}
</script>

<style>
</style>

ref.vue

<template>
	<div>
		<!-- 在模板中访问时,无需通过value属性,它会自动展开 -->
		<p>{{ num }}</p>
		<button @click="change">修改count</button>
	</div>
</template>

<script>
	//导入ref函数
	import {ref} from 'vue'
	export default{
		setup(){
			//创建响应对象
			const num=ref(1)
			console.log(num.value)
			
			const change=()=>{
				num.value=5
			}
			//setup导出数据都要return,可以是函数,也可以是数据
			return {
				num,
				change
			}
		},
		//以后经常使用的就是setup,不是data
		data(){
			return{
				
			}
		}
		
	}
</script>

<style>
</style>

computed.vue

<template>
	<div>
		<p>{{hg}}</p>
		<p>{{ss}}</p>
	</div>
</template>

<script>
	import {computed,ref} from 'vue'
	export default{
		setup(){
			const hg=ref(1)
			
			//创建一个只读的计算属性
			const ss=computed(()=>{
				return hg.value+1
			})
			
			//创建一个可读可写的计算属性
			const pk=computed({
				get(){
					return hg.value+1
				},
				set(hg){
					hg.value=hg
				}
			})
			return {
				hg,
				ss,
				pk
			}
		}
	}
</script>

<style>
</style>

readonly.vue

<template>
	<div></div>
</template>

<script>
	import {reactive,readonly} from 'vue'
	export default{
		setup(){
			const obj =reactive({conunt:1})
			
			//代理了响应式对象
			const proxy=readonly(obj)
			
			console.log(obj)
			console.log(proxy)
			//代理只读对象是不允许修改的
			//修改原始对象时代理对象也会响应式变化
		}
	}
</script>

<style>
</style>

watch.vue和watchEffect.vue

<template>
	<div>
		<!-- 点击之后就停止监视 -->
		<button @click="unwatch">停止监视</button>
	</div>
</template>

<script>
	import {watch,reactive} from 'vue'
	export default{
		setup(){
			const state=reactive({count:1})
			
			
		//监视数据的变化,会返回一个用于取消监视的函数
		//当数据发生改变擦会启动监视,不会立即启动监视
		// const unwatch=watch(() =>
		// 	state.count,(oldValue,newValue)=>{
		// 	console.log(oldValue,newValue)
		// })
		//先立即执行传入的函数
		//当函数内依赖的数据发生变化时会再次执行函数
		watchEffect(()=>{
			console.log(state.count)
		})
		
		return {
			state,
			unwatch
		}
			
	}
</script>

<style>
</style>

App.vue


<template>
	<!-- <comp-setup msg="welcome">
		
	</comp-setup> -->
	<comp-reactive></comp-reactive>
	<comp-ref></comp-ref>
	<comp-computed></comp-computed>
	<comp-reonly></comp-reonly>
	<comp-watch></comp-watch>
</template>

<script>
/*eslint no-mixed-spaces-and-tabs: ["error", "smart-tabs"]*/
// import CompSetup from './components/setupview'
import CompReactive from './components/reactive.vue'
import CompRef from './components/ref.vue'
import CompComputed from './components/compud.vue'
import CompReonly from './components/reonly.vue'
import CompWatch from './components/watch.vue'
export default {
  name: 'App',
  components: {
	  // CompSetup,
	  CompReactive,
	  CompRef,
	  CompComputed,
	  CompReonly,
	  CompWatch,
  }
}
</script>

<style>

</style>

以上是关于VUE3(setup响应式函数系统API)的主要内容,如果未能解决你的问题,请参考以下文章

Vue3和Vue2响应式的区别

vue3常用 Composition API

Vue3 组合式 API 的基础 —— setup

vue3.0 Composition API 上手初体验 神奇的 setup 函数 响应对象数据的绑定

vue3.0 Composition API 上手初体验 神奇的 setup 函数 响应对象数据的绑定

如何让 Vue3 Composition API 代码看起来更函数式?