ttk-cli / uni-vue3-vite-ts-pinia

A template for uniapp with vue3.
MIT License
331 stars 100 forks source link

[bug] 使用defineProps及withDefaults后,props为空对象的问题 #33

Closed Nick955 closed 1 year ago

Nick955 commented 1 year ago

image

想在组件中拿到props里的变量,只能通过getCurrentInstance获取到vue实例,在实例上获取。

无法通过自定义变量的形式获取,请问怎么解决

Allen-1998 commented 1 year ago

不太清楚你的应用场景以及具体预期的效果是什么, 通过 props.a 这样的形式拿到的不是你想要的内容嘛? 其次这个问题看起来是 vue3语法 相关的,与此模版项目无关,可以参阅相关的官方文档或google来查询相关内容。

Nick955 commented 1 year ago

这就是vue3 setup的语法啊 https://cn.vuejs.org/api/sfc-script-setup.html#defineprops-defineemits 我的意思是我在其他vue3的项目里声明的props变量不会是空对象,不需要通过getCurrentInstance来获取props。 在这个模板下直接console props.a是undefined,但是getCurrentInstance().props.a 就是 123 但正常的输出是 props.a 是123

Allen-1998 commented 1 year ago

image

我这边是正常的,你的写法和我这里有什么区别吗

Nick955 commented 1 year ago

谢谢回答,又测试了下发现,声明了默认值的组件如果没有父组件引入,在js里直接获取props里的值就是undefined,但如果有组件引用了,就能正常输出。不太清楚为啥会这样

image

同时也去测试了非uniapp的正常项目,没有这一特殊现象 image

Allen-1998 commented 1 year ago

正常场景下,如果是一个组件,那么必定应该有地方引入才会被挂载,如果是一个页面,那么不应该使用 props,你这边是有什么特殊的业务场景,导致需要这样的写法吗 没被引用会显示 undefind 的原因,大概率是因为小程序的生命周期,渲染,挂载顺序之类的原因导致的,如非必要的话,建议还是不要这样去写