05-计算属性与侦听属性

计算属性

如果插值表达式中的代码过长或者逻辑较为复杂,不仅难以理解,也不方便维护。当遇到逻辑比较复杂的时候,官方不推荐使用插值表达式,而是使用计算属性把逻辑复杂的代码进行分离。

<template>
	<p>{{ computedName }}</p>
</template>
<script>
	import {reactive, toRefs, computed} from 'vue'
	
	export default {
		setup(){
			const state = reactive({
				msg: "hello world"
			})
			const computedName = computed(() => {
				return state.msg.split(' ').reverse().join()
			});
			return {
				...toRefs(state),
				computedName
			}
		}
	}
</script>

使用步骤

  • 1.从vue里面引入import {computed} from 'vue'
  • 2.作为一个函数,可以监听人一个响应式数据的变化,并自动运算之后返回计算结果
    • const 计算属性名 = computed(() => { return 计算属性值 })

与普通方法区别

  • computed具有缓存功能,系统初始化的时候调用一次,当计算属性依赖的响应式数据发生变化时,会被再次调用
  • 方法只有在事件触发的时候才会被调用一次
  • 当然方法也可以实现和计算属性一样的效果,计算属性的存在是基于依赖缓存设计的。
  • 使用计算属性还是方法取决于是否需要更具响应式数据自动更新视图
<template>
	请输入书籍关键字:
	<input type="text" v-model="mytext" /><p></p>
	查询结果:
	<ul>
		<li v-for="(item, index) in computedList" :key="index">
			{{ item }}
		</li>
	</ul>
</template>
<script>
	import { reactive, toRefs, computed, onMounted} from 'vue'
	export default {
		setup(){
			const state = reactive({
				mytext: '',
				list: []
			})
			// 生命周期钩子函数
			onMounted(() => {
				/**
				 * 异步导入数据
				 * test.json的数据结构
				 * {
				 * 		"list": ["", "", "", "", ""]
				 * }
				 */
				fetch('/test.json')
					.then(res => res.json())
					.then(res => {
						state.list = res.list
					})
			})
			const computedList = computed(() => {
				const newList = state.list.filter(item => item.includes(state.mytext))
				return newList
			})
			return {
				...toRefs(state),
				computedList
			}
		}
	}
</script>

侦听属性

vue提供了一种通用的方式来观察和响应当前活动的数据变动,称之为侦听属性。
当需要在数据变化时执行异步或开销较大的操作时,是有用的。
通过watch函数来实现,自带两个变量:

  • 当使用reactive定义的状态数据时,两个变量都是函数;当然也可以侦听ref定义的数据
  • 变量:
    • 第一个函数是所侦听变量的返回函数,当该函数值发生变化,立即出发watch函数
    • 第二个是回调函数,当触发该侦听watch函数后执行什么操作的函数
import { watch } from 'vue'
// 语法格式1
const state = reactive({
	watchData: '',
	...
})
watch(() => state.watchData, () => {
	// 后续处理
})

// 语法格式2
const watchData = ref('')
watch(watchData, () => {
	// 后续处理
})

// 类似vue2写法
const state = ref(0)
watch(state, (newValue, oldValue) => {
	console.log(`原值${oldValue}`);
	console.log(`新值${newValue}`);
})

其他

  • 在vue3.0中已经不再支持vue2.0的过滤器,可以采用普通方法实现;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算属性侦听器是Vue.js框架中用来响应式更新视图的重要概念。它们在Vue项目开发中都是非常重要的知识点,并且在面试中经常被问到。下面是计算属性侦听器的区别和使用场景: 1. 区别: - 计算属性是根据已有的响应式数据计算出一个新的值,并将其缓存起来,只有当依赖的响应式数据发生变化时,才会重新计算。计算属性适用于需要根据其他数据计算得出的值,例如对数据进行过滤、格式化等操作。 - 侦听器是用来监听某个特定的响应式数据的变化,并在数据变化时执行相应的操作。侦听器适用于需要在数据变化时执行异步或复杂的操作,例如发送网络请求、更新其他数据等。 2. 使用场景: - 计算属性适用于需要根据其他数据计算得出的值,并且这个值在多个地方被使用。例如,根据商品的数量和单价计算出总价,然后在多个地方展示总价。 - 侦听器适用于需要监听某个特定的响应式数据的变化,并在数据变化时执行相应的操作。例如,监听用户选择的城市变化,然后根据选择的城市发送网络请求获取该城市的天气信息。 综上所述,计算属性适用于需要根据其他数据计算得出的值,而侦听器适用于需要监听某个特定的响应式数据的变化。在实际开发中,根据具体的需求选择使用计算属性侦听器可以提高代码的可读性和维护性。 #### 引用[.reference_title] - *1* *2* *3* [深入与浅谈 Vue计算属性侦听器的区别和使用(Vue3版本为例)](https://blog.csdn.net/weixin_53231455/article/details/130377369)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值