2

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>;
};
Amila Senadheera
  • 12,229
  • 15
  • 27
  • 43
Ritika
  • 131
  • 1
  • 12

4 Answers4

7

You can do like this.

Note: It does not protect from XSS attacks. In other words, we can say it is not a safe way to do it.

    const App = () => {
      const data = 'lorem <b>ipsum</b>';
    
      return (
        <div
          dangerouslySetInnerHTML={{__html: data}}
        />
      );
    }
    
    export default App;
Dmitriy Popov
  • 2,150
  • 3
  • 25
  • 34
  • Does this protect the site from cross-site scripting (XSS) ? The documentation for dangerouslySetInnerHTML mentions that it is to remind us of it. For example, how do we avoid the app from executing a – Sneha Valabailu Jul 22 '22 at 12:57
4

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"]
      }}
    />
  );
};
Amila Senadheera
  • 12,229
  • 15
  • 27
  • 43
0

In my project html is rendering well but how to render mycustom-css in

 <div
  dangerouslySetInnerHTML={{
    __html: htmlData?.content?.["mycustom-html"]
  }}

/>
Aadarsh
  • 21
  • 3
0

Using dangerouslySetInnerHTML is not a good and safe idea. Instead, you can use a library called npm i html-to-react. You can use it like this:-

import { Parser } from "html-to-react";


<div>
      {Parser().parse(homeData?.acf.banner_title)}
</div>