Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
108
rated 0 times [  114] [ 6]  / answers: 1 / hits: 15133  / 4 Years ago, mon, july 27, 2020, 12:00:00

I'm making a library in VueJS 3 using Composition API. I implemented Provide/Inject as mentioned in docs. But the property in child component is still undefined and I get following error in browser console:


Console


A very simple implementation of my code is as follow:



Usage In Project



<ThemeProvider>
<Button color="green">
ABC
</Button>
</ThemeProvider>

<script>
import { ThemeProvider, Button } from 'my-library'

export default {
name: 'SomePage',
setup() {...},
}
</script>


ThemeProvider.js (Parent Componen)



import { toRefs, reactive, provide, h } from 'vue'

export default {
name: 'theme-provider',
props:
theme: {
type: Object,
default: () => ({...}),
},
},
setup(props, { slots }) {
const { theme } = toRefs(props)

provide('theme', reactive(theme.value))

return () =>
h(
'div',
{...},
slots.default()
)
},
}


Button.js (Child Component)



import { inject, h } from 'vue'

export default {
name: 'Button',
setup(props, { slots }) {
const theme = inject('theme')
console.log(theme) // returns undefined

return () =>
h(
'button',
{...},
slots.default()
)
},
}

More From » vue.js

 Answers
3

For anyone having the same issue, the code had no problem. The problem was the difference in version for 'vue' and '@vue/compiler-sfc' (Vue compiler for Single File Component) in my package.json file.


enter


[#50760] Friday, July 17, 2020, 4 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
shawn

Total Points: 507
Total Questions: 103
Total Answers: 111

Location: American Samoa
Member since Fri, Aug 26, 2022
2 Years ago
;