Render Element by Tag Name in React

19 March 2021

Contents

    When using React it can sometimes be useful to render a standard HTML element given the element name dynamically as a prop

    React allows us to do this provided we store the element name in a variable that starts with a capital letter, as JSX requires this to render a custom element

    We can do something like this by defining a generic element in React which just takes in the name of the tag in addition to it's usual props and children, something like this:

    const GenericElement = ({ tagName:Tag, children, ...innerProps}) => 
      <Tag {...innerProps}> 
        {children}
      </Tag>
    

    We can then render this element by calling the GenericElement with the tagName prop and then any children we'd like:

    <GenericElement tagName="h1">I am an h1</GenericElement>
    

    Here's a short example using Replit for reference, all the important stuff is in the src/App.jsx file: