Welcome to Code Forum!

Join a community that supports you and your coding journey from day one. We strive to be a friendly, supportive community that empowers everyone to be better developers. By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!
  • Guest, before posting your code please take these rules into consideration:
    • It is required to use our BBCode feature to display your code. While within the editor click < / > or >_ and place your code within the BB Code prompt. This helps others with finding a solution by making it easier to read and easier to copy.
    • You can also use markdown to share your code. When using markdown your code will be automatically converted to BBCode. For help with markdown check out the markdown guide.
    • Don't share a wall of code. All we want is the problem area, the code related to your issue.

    GIF shows where to locate </> in the thread and or post editor toolbar.
    To learn more about how to use our BBCode feature, review our "How to post your code into threads" here.

    Thank you, Code Forum.

How to return HTML into component without using <div> tag

ppowell777

Well-Known Coder
I have a page that uses CSS, namely Bootstrap, for design and styling, and extra <DIV> tags can affect the page's look-and-feel, so I want to return HTML from a React function inside a component without having to use a <div> tag:

JavaScript:
import React from 'react';
import DOMPurify from 'dompurify';
import { headerTabArray } from './constants/header_constants';
import { useGetData } from './functions/use_get_data';
import headerPng from './images/header.png';

const Header = () => {

    const generateHeaderTabs = () => {
        let html = '';
        if (typeof headerTabArray !== 'undefined' && headerTabArray != null && headerTabArray.length > 0) {
            html += `<ul>\n`;
            for (let i = 0; i < headerTabArray.length; i++) {
                html += `<li>\n\t
                            <a href="${headerTabArray[i].url}">${headerTabArray[i].text}</a>\n
                        </li>\n`;
            }

            html += `</ul>\n`;
        }

        return DOMPurify.sanitize(html);
    }

    return (
        <header id="header" className="usa-header">
            <div>{/* useGetData({url: myUrl}) */}</div>
        
            <div className="top-bar hidden-sm hidden-xs">
               <div dangerouslySetInnerHTML={{__html: generateHeaderTabs()}} />
            </div>
            <div className="clearfix"></div>
        </header>
    );
};

export default Header;

How else can I write this without having to use the extra <DIV> tag (the one with "dangerouslySetInnerHTML")?

Thanks
 
Solution
Hey there,

You could try using the dangerouslySetInnerHTML attribute directly on the parent div element. So something like this:
JavaScript:
/* some code here */
    return (
        <header id="header" className="usa-header">
            <div>{/* useGetData({url: myUrl}) */}</div>
        
            <div
                className="top-bar hidden-sm hidden-xs"
                dangerouslySetInnerHTML={{__html: generateHeaderTabs()}}
            />
            <div className="clearfix"></div>
        </header>
    );
/* some more code here */
Hey there,

You could try using the dangerouslySetInnerHTML attribute directly on the parent div element. So something like this:
JavaScript:
/* some code here */
    return (
        <header id="header" className="usa-header">
            <div>{/* useGetData({url: myUrl}) */}</div>
        
            <div
                className="top-bar hidden-sm hidden-xs"
                dangerouslySetInnerHTML={{__html: generateHeaderTabs()}}
            />
            <div className="clearfix"></div>
        </header>
    );
/* some more code here */
 
Solution
Hey there,

You could try using the dangerouslySetInnerHTML attribute directly on the parent div element. So something like this:
JavaScript:
/* some code here */
    return (
        <header id="header" className="usa-header">
            <div>{/* useGetData({url: myUrl}) */}</div>
       
            <div
                className="top-bar hidden-sm hidden-xs"
                dangerouslySetInnerHTML={{__html: generateHeaderTabs()}}
            />
            <div className="clearfix"></div>
        </header>
    );
/* some more code here */
Aw man, I am so embarrassed! The solution was right in front of me, and I continued to miss it until now! Thank you!
 
Back
Top Bottom