\n\n```\n\n```javascript\nconst e = React.createElement;\n\nclass LikeButton extends React.Component {\n constructor(props) {\n super(props);\n this.state = { liked: false };\n }\n\n render() {\n if (this.state.liked) {\n return 'You liked this.';\n }\n\n return e(\n 'button',\n { onClick: () => this.setState({ liked: true }) },\n 'Like'\n );\n }\n\n // このメソッドを追加\n static init(elem) {\n const root = ReactDOM.createRoot(elem);\n root.render(e(LikeButton));\n }\n}\n\n// グローバル変数にしている\nwindow.LikeButton = LikeButton;\n```","answerCount":1,"upvoteCount":0,"datePublished":"2022-04-23T01:46:33.895Z","dateModified":"2022-04-23T17:19:33.000Z","suggestedAnswer":[{"@type":"Answer","text":"> また、1ページ内で何度か使用したい場合の正しい書き方がわからず、強引に以下のようにしています。\n\n1ページで複数回の`createRoot`を行っても全く問題ありません。というより、Facebook自身が[そのような使い方をしている](https://ja.reactjs.org/docs/integrating-with-other-libraries.html#integrating-with-other-view-libraries)とのことです。","dateModified":"2022-04-23T08:19:33.432Z","datePublished":"2022-04-23T08:19:33.432Z","upvoteCount":0,"url":"https://teratail.com/questions/g6bsvox439kw96#reply-aiizssyqskiiwp","comment":[]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"トップ","url":"https://teratail.com"},{"@type":"ListItem","position":2,"name":"JavaScriptに関する質問","url":"https://teratail.com/tags/JavaScript"},{"@type":"ListItem","position":3,"name":"JavaScript","url":"https://teratail.com/tags/JavaScript"}]}}}
質問するログイン新規登録
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

1回答

1248閲覧

Reactのプログラムをウェブページ内で複数回使いたい

nuages

総合スコア40

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2022/04/23 01:46

0

0

React をページ内の一部分で使用したいと考えています。
いくつかのチュートリアルを見るとどれも要素IDの指定(ReactDOM.createRootの部分)をJSファイル内で指定していることがほとんどで、他プロジェクトで使いまわしたり id が動的に決まる場合に使いにくく感じています。
また、1ページ内で何度か使用したい場合の正しい書き方がわからず、強引に以下のようにしています。
このような用途を実現するにはどのように書くのが正しい書き方なのでしょうか?

※プログラムはブラウザ上でそのまま動作できるよう babel + webpack でトランスパイルしています。

html

1<div id="button1"></div> 2<div id="button2"></div> 3 4<script src="app.js"></script> 5<script> 6 LikeButton.init(document.getElementById('button1')); 7 LikeButton.init(document.getElementById('button2')); 8</script>

javascript

1const e = React.createElement; 2 3class LikeButton extends React.Component { 4 constructor(props) { 5 super(props); 6 this.state = { liked: false }; 7 } 8 9 render() { 10 if (this.state.liked) { 11 return 'You liked this.'; 12 } 13 14 return e( 15 'button', 16 { onClick: () => this.setState({ liked: true }) }, 17 'Like' 18 ); 19 } 20 21 // このメソッドを追加 22 static init(elem) { 23 const root = ReactDOM.createRoot(elem); 24 root.render(e(LikeButton)); 25 } 26} 27 28// グローバル変数にしている 29window.LikeButton = LikeButton;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

また、1ページ内で何度か使用したい場合の正しい書き方がわからず、強引に以下のようにしています。

1ページで複数回のcreateRootを行っても全く問題ありません。というより、Facebook自身がそのような使い方をしているとのことです。

投稿2022/04/23 08:19

maisumakun

総合スコア146849

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問