Skip to content

Instantly share code, notes, and snippets.

@gaearon
Last active September 22, 2024 19:21
Show Gist options
  • Save gaearon/6668a1f6986742109c00a581ce704605 to your computer and use it in GitHub Desktop.
Save gaearon/6668a1f6986742109c00a581ce704605 to your computer and use it in GitHub Desktop.
Add React in One Minute
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Add React in One Minute</title>
</head>
<body>
<h2>Add React in One Minute</h2>
<p>This page demonstrates using React with no build tooling.</p>
<p>React is loaded as a script tag.</p>
<!-- We will put our React component inside this div. -->
<div id="like_button_container"></div>
<!-- Load React. -->
<!-- Note: when deploying, replace "development.js" with "production.min.js". -->
<script src="https://unpkg.com/react@18/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js" crossorigin></script>
<!-- Load our React component. -->
<script src="like_button.js"></script>
</body>
</html>
'use strict';
const e = React.createElement;
class LikeButton extends React.Component {
constructor(props) {
super(props);
this.state = { liked: false };
}
render() {
if (this.state.liked) {
return 'You liked this.';
}
return e(
'button',
{ onClick: () => this.setState({ liked: true }) },
'Like'
);
}
}
const domContainer = document.querySelector('#like_button_container');
const root = ReactDOM.createRoot(domContainer);
root.render(e(LikeButton));
@spicecoder
Copy link

@JVarghese99 ,I don't see you are importing ExButton component - please do

@JVarghese99
Copy link

HI @spicecoder : thank you. I did try importing the ExtButton component in the above javascript but is gave error "require is not defined". I manged to get my example working by exporting the ExtButton in the reactjs project (window as any).ExButton = ExButton

Please see my complete example here https://dev.to/jvarghese/how-to-use-previously-packaged-reactjs-component-in-static-website-21be

@spicecoder
Copy link

@JVarghese99 ,firstly you need to make sure you can generate the component i.e you need to have the full stack of dependent components ,e.g your button component looks like a custom component as well ; once you can generate the component in a reactjs project, then build that project & you should have the right code along with the mimified js that you can bring to your static site

@MerlinsServ
Copy link

Ok

@jo777750
Copy link

jo777750 commented May 23, 2022

how to add a color to the 'You liked this' text?

@Cyber9jaDev
Copy link

Not working, I'm getting 'require' is not defined

@okobsamoht
Copy link

@jo777750
here it is:

if (this.state.liked) {
      return e(
          'span',
          {style:{color:"blue",background:"silver",fontSize:22}},
          'You liked this.'
          );
    }

Screenshot from 2022-05-29 15-28-53

@okobsamoht
Copy link

@Dipsaint1 can you show a screenshot?

@Cyber9jaDev
Copy link

@okobsamoht
Thank you for trying to help out.
I've found a solution.

@jigneshbhimani
Copy link

@gaearon How to pass props in button component?

@moccodes
Copy link

Hi I have resolved this bug, make sure the file name matches the React Component so e.g

<script src="like_button.js"></script>

file name in script must be like_button.js_ they must match and like button will appear

Thank you.

@Chrissiku
Copy link

It's working

@jpol01
Copy link

jpol01 commented Jun 27, 2022

If I use the three lines of code from this page:

https://reactjs.org/docs/add-react-to-a-website.html

const domContainer = document.querySelector('#like_button_container'); const root = ReactDOM.createRoot(domContainer); root.render(e(LikeButton));

The LIKE button does not appear on the html page.

But if I use just the last two lines in the downloaded js file the LIKE button does appear:

const domContainer = document.querySelector('#like_button_container'); ReactDOM.render(e(LikeButton), domContainer);

I don't know enough js/react to know what the above 3 lines does not work but the 2 lines does.

It is rather troubling especially when I am brand new to react and I am told that the react docs are the best place to learn react and I have flunked on the very first item....

same here i couldnt make it work, weird situation

@MohamedAli00949
Copy link

very nice, thank you

@lucia-2473
Copy link

Thank you for this.
Is there a way to re-render the React component based on some action on the HTML page?
For example, changing a date filter and re-rendering the React component with new values for the props (the dates to filter by).

@matfolio
Copy link

matfolio commented Aug 7, 2022

If I use the three lines of code from this page:
https://reactjs.org/docs/add-react-to-a-website.html
const domContainer = document.querySelector('#like_button_container'); const root = ReactDOM.createRoot(domContainer); root.render(e(LikeButton));
The LIKE button does not appear on the html page.
But if I use just the last two lines in the downloaded js file the LIKE button does appear:
const domContainer = document.querySelector('#like_button_container'); ReactDOM.render(e(LikeButton), domContainer);
I don't know enough js/react to know what the above 3 lines does not work but the 2 lines does.
It is rather troubling especially when I am brand new to react and I am told that the react docs are the best place to learn react and I have flunked on the very first item....

same here i couldnt make it work, weird situation

Unzip the downloaded file and open its contents using an IDE of your choice. You can use a live server to publish the content of your html file. The problem is that the script tag is not able to locate the referenced script file.

@skillwork-mdimitrov
Copy link

@gaearon How to pass props in button component?

Try out https://github.com/michaldoda/react-supervisor#readme. Haven't personally tested it, but looks promising.

@skillwork-mdimitrov
Copy link

Thank you for this. Is there a way to re-render the React component based on some action on the HTML page? For example, changing a date filter and re-rendering the React component with new values for the props (the dates to filter by).

At the moment I'm looking into https://github.com/michaldoda/react-supervisor#what-it-does. Seems like it might do what you desire, you can give it a shot.

@gmumdzhiev
Copy link

Is it possible to implement the same logic , but for an react-native application ?

@melashu
Copy link

melashu commented Sep 6, 2022

Great

@olamiji-8
Copy link

Wow this is nice

@AminVost
Copy link

dosen't work for me , please help
I want to use it in a pre-built project
foot
html
js

@shegy28
Copy link

shegy28 commented Jan 9, 2023

Really helpful thanks alot

@shegy28
Copy link

shegy28 commented Jan 9, 2023

Is it possible to implement the same logic , but for an react-native application ?

yes I think so

@exezick
Copy link

exezick commented Feb 9, 2023

I have a question guys, what if I created another component and I want to call it or import it inside like_button.js how to do that?

@jo777750
Copy link

jo777750 commented Feb 9, 2023 via email

@exezick
Copy link

exezick commented Feb 9, 2023

I tried to import a component using react cdn but I cand import it, I posted the problem in stack overflow. https://stackoverflow.com/questions/75375157/how-to-import-my-component-using-reactjs-cdn?noredirect=1#comment133002007_75375157

@MAB015
Copy link

MAB015 commented Feb 28, 2023

Great

@Arifurrex
Copy link

thanks

@onigetoc
Copy link

onigetoc commented Sep 7, 2023

jsfiddle demo but without the js url component but direct inside the javascript:
https://jsfiddle.net/onigetoc/ua2hoqm1/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment