Perhaps messing around with something obvious in VueJS syntax, but I can not make this Button.vue
SFC to work:
<script setup>
defineProps({
...
href: String,
...
});
</script>
...
<template>
<Link :href="href"
:as="href == null ? 'button' : null"
:type="href == null ? 'button' : null">
<slot />
</Link>
</template>
I simply want that if there is href
, Link
is treated like an anchor, with href.
But if no href
prop coming, it is treated as a regular button, adding as="button"
and type="button"
to the Link component attrs.
But the browser console output that I get when instantiating a Button
, e.g., with href="register"
is this:
[Vue warn]: Unhandled error during execution of render function
at <Link href="http://myproject.test/register" as=null type=null ...>
href
value is fine in this case, as href
prop is provided, but look at the as=null type=null
part...
Looks like "null" is not treated as null
.
Using Vue3 by the way :)
Any ideas? Thank you in advance
CodePudding user response:
If null is the issue then You can try this
<Link :href="href"
:as="href == null ? 'button' : a"
:type="href == null ? 'button' : a">
<slot />
</Link>
In inertia Link component as props refer to HTML tag name
CodePudding user response:
Finally found the problem. Looking at Vue3 docs, I saw that optional props, when not present, evaluate as undefined
, not as null
like in Vue2.
Then, simply substituting every null
appearance to undefined
in my code did the trick.