前提・実現したいこと
CodePenで動いているコードがあります。
https://codesandbox.io/s/pp3n7wnzvx?file=/src/index.js:0-598
これを、gatsby.jsで使おうとしています。
発生している問題・エラーメッセージ
「Gatsby develop」ではsuccessするのですが、ブラウザで開くとエラーが出ています。
Error: Target container is not a DOM element.
該当のソースコード
Gatsby.js
1import React, {Component} from "react"; 2import { render } from "react-dom"; 3 4const styles = { 5 fontFamily: "sans-serif", 6 textAlign: "center" 7}; 8 9class App extends Component { 10 state = { 11 index: 0 12 } 13 reload = () => { 14 this.setState({ 15 index: this.state.index+1 16 }); 17 } 18 render() { 19 return ( 20 <div style={styles}> 21 <p>Hello</p> 22 <button onClick={this.reload} >Reload</button> 23 <iframe key={this.state.index} title="title" src="https://fr.wikipedia.org/wiki/Main_Page" /> 24 </div> 25 ); 26 } 27} 28 29render(<App />, document.getElementById("root")); 30
試したこと
idを変えたり、divで挟んだりしてみたのですが、状況に変わりありません。
CodePenで動いているReactのコードがGatsbyで動かないので、WebPackについて調べてみたりしたのですが、よくわかりませんでした。
補足情報(FW/ツールのバージョンなど)
ReactからGatsbyへのコードコピーでうまくいかないことがままあるので、基礎的な何かを見落としているのでは?と心配になり質問させていただきました。
普通に React を使う場合、最後の行の render(<App />, document.getElementById("root")); で index.html の <div id="root"> に React 要素 <App /> を埋め込みます。
が、Gatsby は詳しくありませんが、どうやらすでに React を使っているようなので、render(<App />, 〜); はたぶん不要で、既存の Gatsby の React 階層のどこか (App を表示したい場所) にこの <App /> (App という名前だと他と被りそうですが…) を埋め込めばよいのでは。
ありがとうございます。render不要ということで、最後の行を、
export default App;
としたところ、無事動きました!
回答1件
あなたの回答
tips
プレビュー