代码demo:
// 父组件html:<comp v-model:tableData="tableData"></comp>js:let tableData = ref([]);// 获取评论列表async function getCommentList() { let res = await api(); tableData.value = res.data}// 子组件js:const props = defineProps({ tableData: { type: Array, default: () => [], }});watch( ()=>props.tableData,// 为什么这里不加()=>就无法进入监听? (newVal) => {...}, { deep: true });
请教一下子组件的watch不加()=>就无法进入监听?
根据官方的API说明:
watch(WatcherSource, Callback, [WatchOptions])type WatcherSource<T> = Ref<T> | (() => T) interface WatchOptions extends WatchEffectOptions { deep?: boolean // 默认:false immediate?: boolean // 默认:false flush?: string // 默认:'pre'}
因此你应该:
watch( tableData, (newVal) => {...}, { deep: true });
最后提醒一下:
若使用ref定义的引用对象:
若使用reactive定义的引用对象:
在 Vue 3 中,watch
是一个用于观察和响应 Vue 实例上的数据变化的 API。它允许你在数据变化时执行一些自定义逻辑。
对于你的问题,watch
函数的第一个参数应该是一个依赖项数组,该数组包含了你想要观察的响应式属性。在这个数组中,你可以直接使用变量名(对于局部响应式属性)或 this.$refs
(对于子组件的响应式属性)。
在你的代码中,你正在尝试观察一个从父组件传递到子组件的 prop,即 tableData
。由于 tableData
是通过 prop 传递的,它不是子组件的局部响应式属性。因此,你不能直接将其放入依赖项数组中。
解决这个问题的一种方法是使用箭头函数。箭头函数可以捕获定义它们的作用域中的变量,这意味着你可以在箭头函数中使用 props.tableData
,而不是直接在 watch
函数中使用它。这样,当 tableData
发生变化时,箭头函数将返回新的值,从而使 watch
进入监听模式。
下面是修改后的代码:
// 子组件const props = defineProps({ tableData: { type: Array, default: () => [], }});watch( () => props.tableData, // 使用箭头函数捕获props.tableData (newVal) => { // 当 tableData 发生变化时执行的逻辑 }, { deep: true });
现在,当 tableData
发生变化时,watch
将进入监听模式,并执行你提供的回调函数。
父组件用ref声明一数组 然后循环子组件并把数据传递给子组件 当父组件的数据发生变化时 希望子组件能监听到并响应 目前不知道为何没响应.请教哪里出了问题? 是不是这种业务场景最正规的是不是应该用reactive? 我试了一下 加immediate就可以了 但是我并不想第一次就触发
父组件 子组件 为什么执行getSonData的时候,无法获取到子组件的data?sonRef.value.data只能在onMounted内使用吗?不能在父组件的方法里执行?
vue2 在子组件监听父组件的值value变化,对子组件监听父组件传来的value,之后做更新操作,会导致父组件的requestAnimationFrame的循环更新value值卡顿,这是什么问题? 子组件
本文向大家介绍浅谈Vue父子组件和非父子组件传值问题,包括了浅谈Vue父子组件和非父子组件传值问题的使用技巧和注意事项,需要的朋友参考一下 本文介绍了浅谈Vue父子组件和非父子组件传值问题,分享给大家,具体如下: 1.如何创建组件 1.新建一个组件,如:在goods文件夹下新建goodsList.vue 2.在main.js中引入 import goodsList from 'goods/good
老师们好,我用el-form封装了一个组件, 父组件想调用这个组件的的this.$refs['formRef'].resetFields() 方法, 测试了一些方法都不好用想请老师们给一个思路,谢谢啦。这个环境是用vue2. 下面是封装子组件的代码:
本文向大家介绍解决Vue.js父组件$on无法监听子组件$emit触发事件的问题,包括了解决Vue.js父组件$on无法监听子组件$emit触发事件的问题的使用技巧和注意事项,需要的朋友参考一下 最近学习vuejs看例子中用$on无法监听子组件$emit触发事件: 使用版本 vue.js 2.2.5 参考文献 1.vuejs API 2.解决实例 问题分析 1.之前写的自定义组件事件触发为this