当前位置: 首页 > wzjs >正文

网站检索功能怎么做呢长沙网站推广有哪些啊

网站检索功能怎么做呢,长沙网站推广有哪些啊,项目网站的建设有两种模式,广州海珠区培训机构网站建设watch 的第一个参数可以是不同形式的“数据源”&#xff1a;它可以是一个 ref (包括计算属性)、一个响应式对象、一个 getter 函数、或多个数据源组成的数组&#xff1a; 1&#xff1a;reactive监听对象 <template><div><h1>情况二&#xff1a;watchEffect…

watch 的第一个参数可以是不同形式的“数据源”:它可以是一个 ref (包括计算属性)、一个响应式对象、一个 getter 函数、或多个数据源组成的数组:

1:reactive监听对象

<template><div><h1>情况二:watchEffect自动监视数据</h1><h2>两个数字的和:{{ count }}</h2></div>
</template>
<script setup lang="ts" name="DemoWatch">
import { reactive, ref, watch } from 'vue'let count = ref(0)const sum = reactive({a: 1,b: 2
})watch(
//source() => {console.log('x')return sum.a + sum.b},
//cb(value) => {console.log('执行回调sum:', value)})setTimeout(() => {sum.a++sum.b--console.log('执行定时器了')
}, 1000)</script>
<style scoped></style>

执行结果如下

在这里插入图片描述

分析:组件一开始挂载先执行一次监听中的source,一秒后,因为对sum.a或sum.b操作,所以又执行了一次source,但是source的返回值都没有发生变化,所以都没有执行回调函数(cb),这样监听只有当sum.a + sum.b返回的值发生变化,才会执行回调函数(cb)

2:reactive监听对象(使用 immediate: true,立即执行一次回调函数(cb))

<template><div><h1>情况二:watchEffect自动监视数据</h1><h2>两个数字的和:{{ count }}</h2></div>
</template>
<script setup lang="ts" name="DemoWatch">
import { reactive, ref, watch } from 'vue'let count = ref(0)const sum = reactive({a: 1,b: 2
})watch(//source() => {console.log('x')return sum.a + sum.b},//cb(value) => {console.log('执行回调sum:', value)},//  立即执行一次回调函数(cb){immediate: true}
)setTimeout(() => {sum.a++sum.b--console.log('执行定时器了')
}, 1000)
</script>
<style scoped></style>

执行结果如下

在这里插入图片描述

3:reactive监听对象(使用 immediate: true,立即执行一次回调函数(cb))

<template><div><h1>情况二:watchEffect自动监视数据</h1><h2>两个数字的和:{{ count }}</h2></div>
</template>
<script setup lang="ts" name="DemoWatch">
import { reactive, ref, watch } from 'vue'let count = ref(0)const sum = reactive({a: 1,b: 2
})watch(//source() => {console.log('x')return sum.a + sum.b},//cb(value) => {console.log('执行回调sum:', value)},// 深度监听{deep: true}
)setTimeout(() => {sum.a++sum.b--console.log('执行定时器了')
}, 1000)
</script>
<style scoped></style>

执行结果如下

在这里插入图片描述

分析:为什么加了深度监听后会执行回调?如果你添加了 { deep: true } 选项,即使计算值相同,回调也会执行,这是因为:

1:深度监听的机制:deep: true 会让 Vue 不仅比较计算结果的最终值,还会追踪依赖项的变化

2:依赖项变化:虽然 sum.a + sum.b 的结果没变,但 sum.a 和 sum.b 本身都发生了变化

3:触发条件:深度监听下,只要依赖的响应式数据 (这里是 sum.a 和 sum.b) 发生了变化,就会触发回调,不管计算结果是否相同

如果你希望在依赖项变化时总是执行回调,即使计算结果相同,可以使用 watchEffect:

watchEffect(() => {const value = sum.a + sum.bconsole.log('执行回调sum:', value)
})

或者如果你想保持使用 watch 但总是触发,可以添加 flush: ‘sync’ 选项:

watch(() => sum.a + sum.b,(value) => {console.log('执行回调sum:', value)},{ deep: true, flush: 'sync' }
)

总结:
默认情况下 watch 只在返回值变化时触发
deep: true 会让它追踪依赖项的变化,即使返回值相同也会触发

4:reactive监听对象

<template><div><h1>情况二:watchEffect自动监视数据</h1><h2>两个数字的和:{{ count }}</h2></div>
</template>
<script setup lang="ts" name="DemoWatch">
import { reactive, ref, watch } from 'vue'let count = ref(0)const sum = reactive({a: 1,b: 2,c: 3
})watch(//source() => {console.log('x:', sum.c)return sum.a + sum.b},//cb(value) => {console.log('执行回调sum:', value)}
)setTimeout(() => {sum.c++console.log('执行定时器了')
}, 1000)
</script>
<style scoped></style>

执行结果如下

在这里插入图片描述

分析:一开始先执行source方法所以打印了x:3,又因为一秒后修改了c的值,同时source中对c有监听,所以又执行了一次source,但是因为返回的都是a+b,返回值没有变化,所以不执行回调函数(cb)

5:reactive监听对象

watch(//source() => {console.log('x:', sum.c = 10)  //修改了 `sum.c`,但没有 **读取** 它(不是依赖)return sum.a    // 只有 `sum.a` 被 **读取**,所以 Vue 只监听 `sum.a` 的变化},//cb(value) => {console.log('执行回调sum:', value)}
)setTimeout(() => {sum.c++console.log('执行定时器了')
}, 1000)

执行结果如下

在这里插入图片描述

5-1:reactive监听对象

watch(//source() => {console.log('x:', sum.c === 10)  //读取 `sum.c`, **读取** 它(是依赖)return sum.a  // 只有 `sum.a` 被 **读取**,所以 Vue 只监听 `sum.a` 的变化},//cb(value) => {console.log('执行回调sum:', value)}
)setTimeout(() => {sum.c++console.log('执行定时器了')
}, 1000

执行结果如下

在这里插入图片描述

总结:如果 getter 函数内部有代码修改了响应式数据(如 sum.c = 10),但 没有读取它,则 Vue 不会 将其视为依赖,因此不会触发重新执行,(sum.c === 10),读取它,则 Vue 会 将其视为依赖,会触发重新执行

6:在 Vue 3 的 watch API 中,reactive的对象,使用函数返回值 () => sum 和直接使用 sum 作为侦听源(source)有重要区别

6-1:reactive的对象执行结果

<template><div><h1>情况二:watchEffect自动监视数据</h1><h2>两个数字的和:{{ count }}</h2></div>
</template>
<script setup lang="ts" name="DemoWatch">
import { reactive, ref, watch } from 'vue'let count = ref(0)const sum = reactive({person: { age: 18, name: '张三' },b: 2,c: 3
})watch(// source() => {console.log('x')return sum},// sum,//cb(value) => {console.log('执行回调sum:', value)}
)setTimeout(() => {sum.person.name = '李四'console.log('执行定时器了')
}, 1000)
</script>
<style scoped></style>

执行结果如下

在这里插入图片描述

6-2:reactive的对象执行结果

<template><div><h1>情况二:watchEffect自动监视数据</h1><h2>两个数字的和:{{ count }}</h2></div>
</template>
<script setup lang="ts" name="DemoWatch">
import { reactive, ref, watch } from 'vue'let count = ref(0)const sum = reactive({person: { age: 18, name: '张三' },b: 2,c: 3
})watch(// source// () => {//   console.log('x')//   return sum// },sum,//cb(value) => {console.log('执行回调sum:', value)}
)setTimeout(() => {sum.person.name = '李四'console.log('执行定时器了')
}, 1000)
</script>
<style scoped></style>

执行结果如下

在这里插入图片描述

总结区别:

方式监听目标深度监听适合场景
watch(sum, cb)整个响应式对象自动开启需要深度监听所有变化
watch(() => sum, cb)对象的引用不开启几乎无用(reactive 引用不变)
watch(() => sum.xxx, cb)特定属性不开启精确监听特定属性

7:在 Vue 3 的 watch API 中,ref的对象,使用函数返回值 () => sum 和直接使用 sum 作为侦听源(source)有重要区别

7-1:ref的对象执行结果

<template><div><h1>情况二:watchEffect自动监视数据</h1><h2>两个数字的和:{{ count }}</h2></div>
</template>
<script setup lang="ts" name="DemoWatch">
import { reactive, ref, watch } from 'vue'let count = ref(0)const sum = ref({person: { age: 18, name: '张三' },b: 2,c: 3
})watch(// source// () => {//   console.log('x')//   return sum.value// },sum,//cb(value) => {console.log('执行回调sum:', value)}
)setTimeout(() => {sum.value.person.name = '李四'console.log('执行定时器了')
}, 1000)
</script>
<style scoped></style>

执行结果如下

在这里插入图片描述

7-2:ref的对象执行结果

<template><div><h1>情况二:watchEffect自动监视数据</h1><h2>两个数字的和:{{ count }}</h2></div>
</template>
<script setup lang="ts" name="DemoWatch">
import { reactive, ref, watch } from 'vue'let count = ref(0)const sum = ref({person: { age: 18, name: '张三' },b: 2,c: 3
})watch(// source() => {console.log('x')return sum.value},// sum,//cb(value) => {console.log('执行回调sum:', value)}
)setTimeout(() => {sum.value.person.name = '李四'console.log('执行定时器了')
}, 1000)
</script>
<style scoped></style>

执行结果如下

在这里插入图片描述

总结区别:

监听方式触发条件深度监听适用场景
watch(sum, cb)仅 sum.value = newObj 时触发监听整个 ref 替换
watch(sum.value, cb)同理成reactive深度监听嵌套变化(不推荐)不推荐(可能丢失响应性)
watch(() => sum.value, cb, { deep: true })度监听嵌套变化推荐(清晰且可控)
watch(() => sum.value.xxx, cb)监听特定属性精确监听,性能优化

注意:如果使用ref包裹的对象,使用ref.value得到后是一个代理,就同理成reactive

在这里插入图片描述

http://www.dtcms.com/wzjs/132511.html

相关文章:

  • 做网站公司大连微信营销的方法
  • 律师事务所网站制作方案宁波seo怎么做优化
  • 原创音乐网站建设最近新闻小学生摘抄
  • 宁波seo整站优化品牌建设
  • 在线设计装修的网站百度在西安有分公司吗
  • 做推广能提高网站权重么地推拉新接单平台
  • 搜狗 优化网站百度网盘破解版
  • 自己做的网站如何在百度被搜索到2024年重启核酸
  • 免费建站网站号软件定制开发平台
  • 网站用excel做数据库吗百度网站怎么提升排名
  • 衡水哪儿做网站便宜百度代理公司查询
  • 开发区网站建设三只松鼠软文范例500字
  • 做任务得佣金的网站搜狗关键词排名此会zjkwlgs
  • 做外围代理要有自己的网站网页关键词优化软件
  • 电子商务烟台网站建设网站片区
  • html 网站新功能介绍网站怎么做收录
  • 织梦网站做瀑布流方便流氓网站
  • 做微信商城网站公司网络营销专业就业公司
  • 有哪些文本封面做的好的网站今日重大新闻
  • 外贸英文商城网站建设网页广告怎么做
  • 自学网站平面设计排名优化哪家专业
  • 帝国建站教程清远seo
  • 江门市智企互联网站建设查询网 域名查询
  • 专业网站建设服务包括有没有免费的写文案的软件
  • 做彩票网站用什么服务器seo公司推荐
  • 北京住房建设委员会网站手机网站建设案例
  • 乌鲁木齐哪里可以建设网站外贸接单平台
  • 传奇新开网站传奇三肖搜索引擎营销的案例
  • 电商推广都有哪些诀窍seo指的是
  • 做投资的网站浏览器2345网址导航下载安装