# Dynamic Components All primitive components that render a DOM element are dynamic, which means that you can modify the element or the component they should render as. ## Native elements [Section titled Native elements](https://corvu.dev/docs/dynamic-components/\#native-elements) In most cases, you shouldn’t need to change the DOM element that the primitive component renders. corvu has sensible defaults for all components. But there are cases where it makes sense to change them. An example would be the `Tooltip` trigger which renders as a `button` element. You may want to render a tooltip on a link (`a` tag) instead. To do this, you have to specify the `as` property on the trigger component: ``` corvu.dev ``` ## Solid components [Section titled Solid components](https://corvu.dev/docs/dynamic-components/\#solid-components) A much more common use case is to render a primitive component as a custom Solid component. This is useful to apply default styling or to add additional functionality. For example, you might have your own, custom-styled button component and want to use it as a trigger for a dialog: ``` import { ComponentProps, splitProps, } from 'solid-js' import Dialog from '@corvu/dialog' const CustomButton = ( props: ComponentProps<'button'> & { variant: 'fill' | 'outline' }, ) => { const [local, rest] = splitProps(props, ['variant']) // Apply your custom styling here return