28

I'm looking to embed my react application into an existing plain html / javascript website. What I've found so far is that you are only able to embed individual components into existing websites, not entire react applications.

Naturally I have an app component which contains the entire application. Am I able to embed the full application by embedding this component? My concern is all the modules I'm using (e.g. axios, bootstrap) will break.

I've been looking for a good tutorial on how to do this but I'm not finding many examples of trying to embed the entire application into an existing page.

My understanding of how to do this, is to reference the react javascript source links in the html page head, possibly also babel although its unclear to me if babel will work. Then we can use the renderDom method like we normally would.

On page load can I run my index.js file to insert my react app component into the dom? If this would work, are there any issues with file structure, file updates I would need to take care of?

If I'm driving off path out into the wilderness and there is a better way to handle it I'm open to suggestions. I'm just looking to see if someone else has experience doing this before I start down a bad path.

2
  • The entry point to rendering a react application always takes a DOM node, there's nothing special about a react "app" - it's just a component reactjs.org/docs/rendering-elements.html. Embedding react in an existing page is fine and common Commented Dec 19, 2018 at 17:03
  • On page load can I run my index.js file to insert my react app component into the dom? - at this point project dependencies don't matter because they likely should be bundled into JS file. Just start with create-react-app, bundle the app and load it in any html page of your choice. Commented Dec 19, 2018 at 17:08

2 Answers 2

27

I was able to embed my full react application by doing the following...

  1. I built my react app production files with npm run build
  2. I copied those files into the existing web project at the root level
  3. Then I opened the index.html file generated from npm run build and copied the scripts in the head and body sections to the page I wanted to drop in my application
  4. Finally I added a div with the id root (this is what my renderDOM method is looking for) where I wanted my application to appear on the existing web page.

That was it. Super easy, thanks for the help!

Sign up to request clarification or add additional context in comments.

3 Comments

Worked for us in Django!
This is going to work and I did the same to embed my chatbot. But what I want is that I need a single script or just a few lines of code that I can add to any HTML file and I should be able to see the chatbot. w/o doing this much of transfer of files. Is there a way to do it? Suppose we are creating a react widget or something.
Please note that you need to adjust the script urls in the header and body to use full path urls, not relative.
2

Just wanted to add a quick additional approach here.

If you already have a Flask app and you're trying to put React components or an app (so the base component of an app) onto an existing HTML page in the Flask app, basically the only thing that you need is Babel, unless you are able to write React components without using JSX (so in plain Javascript) in which case you'd need nothing.

Step 1: To attach Babel to your project, you'll have to grab the Babel node modules which means your project will be associated with NPM for the sole purpose of using the Babel functions. You can do this by running the following commands in your project root directory (Node.js must be installed):

npm init -y

npm install babel-cli@6 babel-preset-react-app@3

Step 2: Once Babel is attached to your project, you'll have to actually transpile the existing React component .js files from JSX into plain Javascript like so:

npx babel --watch (jsdirectory) --out-dir (outputdirectory) --presets react-app/prod

where (jsdirectory) is the path to the directory where your React component files written using JSX are, and (outputdirectory) is where you want your translated files to show up--use . for (outputdirectory) to have transpiled files appear in your root directory.

Step 3: After the plain Javascript versions of your React files appear, make sure they are linked to your HTML page instead of the original JSX-utilizing files (replace the original script tag's .js file)

Step 4: Make sure the HTML page in question is linked to the .CSS files you want (they will modify the transpiled Javascript in the same manner as they did the JSX files in a project made using Create-React-App because the class names are the same) as well as the required React resources:

<script src="https://unpkg.com/react@16/umd/react.production.min.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js" crossorigin></script>

After you do those quick steps your React components should render no problem on that page in your Python-Flask application.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.