项目中遇到了这么个问题
场景:封装select组件,通过子组件选中后传递值给父组件,父组件需要回显这个值(这里使用 defineProps和defineEmits就可以实现,或者直接使用defineModel也可以实现,但是uniapp目前不支持),使用后父组件确实是拿到值了,但是子组件回显不出来,打印父组件确实是有这个值并且是响应式的
排查结果:子组件在接收defineProps的时候是处于setup生命周期里面,也就是只会触发一次defineProps,所以子组件接收不到后续的值
解决方法:
1:使用定时器定时拿取defineProps
结果:性能消耗过大,并且你封装肯定不止一个地方使用,直接pass
2:使用watch监听
javascript
watch(()=>echo.value,(New, Old) => {
console.log(`新值:${New} --------- 老值:${Old}`)
})
结果:监听不到这个值的变化
3:使用watchEffect监听
javascript
watchEffect(() => {
echo.value = data.value
})
结果:成功解决,在这个函数里再赋一次值即可
官方地址:响应式 API:核心 | Vue.js