记录vue3 provide 和 inject 的一次bug

573 阅读1分钟

问题:

使用provide对子组件进行传值时,子组件使用inject接收不到传过来的值,同时报错injection “info” not found

截屏2022-07-08 上午11.11.44.png

截屏2022-07-08 上午11.14.50.png

截屏2022-07-08 下午2.37.46.png

猜测原因:

const [register] = useDrawerInner((data) => { // 每次点击打开抽屉
    info.data = toRaw(data)
    provide('info', info); 
});

provide('info', info) 是打开抽屉是注入,每次点击都会注入一次,应该写在外面

第一次:

let info = reactive({}) 依旧失败

截屏2022-07-08 下午3.27.18.png

解决:

截屏2022-07-08 下午3.24.54.png

原因:

reactive使用的是es6 proxy进行代理监听,如果是空对象的话监听不到,所以需要使用data:{}, ref也同理,reactive({value:{}})