How to render a different element inside a React component
There are moments that you just want to share the same component style between different elements. Take a button for example, you may want to render one as an anchor at some point.
To do this, you can add a prop, in this case I'll use tag
, that will be used to define the rendered element. Notice that with ||
(OR), we can define a fallback, in case a tag
isn't present.
import React from 'react'
function Button({ children, tag, ...other }) {
const Component = tag || 'button'
return (
<Component className="flex items-center ..." {...other}>
{children}
</Component>
)
}
export default Button
The best part of this code is that you don't need to make any other change between a real button
and an anchor. You could still pass an href
and it would be present in the final element thanks to the destructuring of other
.
<Button tag="a" href="#">
This is a link!
</Button>