Search code examples
javascripthtmlreactjsgrapesjs

How to render HTML from database in react?


I am working on making custom webpages with the help of Grapesjs. I want to render the html page in react js which has been been saved by the grapesjs editor in the database. Following is the format in which the data is being saved.

Right now I just able to get the html code in the inspect window, but how can i render it on the page?

import React from "react";
import axios from "axios";
// import {renderWebpage} from "../actions/webpage"

export const Page: React.FC = () => {
  const renderWebpage = axios
    .get("http://localhost:8080/61ea7fd2268f37443ca4d59a")
    .then((response) => {
      console.log("response", response);
      console.log(response.data, "data");
    });

  return <div>demo</div>;
};

Solution

  • You need to set the response.data to a component state using useEffect hook and then render the HTML string using dangerouslySetInnerHTML property.

    Try like below.

    import React, { useState, useEffect } from "react";
    import axios from "axios";
    // import {renderWebpage} from "../actions/webpage"
    type HTMLData = {
      content: { "mycustom-html": string };
    };
    
    export const Page: React.FC = () => {
      const [htmlData, setHtmlData] = useState<HTMLData>({
        content: { "mycustom-html": "<p>demo</p>" }
      });
    
      const renderWebpage = () => {
        axios
          .get("http://localhost:8080/61ea7fd2268f37443ca4d59a")
          .then((response) => {
            console.log("response", response);
            console.log(response.data, "data");
            setHtmlData(response.data);
          });
      };
    
      useEffect(() => {
        renderWebpage();
      }, []);
    
      return (
        <div
          dangerouslySetInnerHTML={{
            __html: htmlData?.content?.["mycustom-html"]
          }}
        />
      );
    };