現在Reactを勉強しています。
ただ、この質問はおそらくJSだと思います。
問題となるのは下記コードです。
/* toggle.js */ let showed = false let button = document.getElementById('button') let text = document.getElementById('text') const controllDetails = () => { if (showed) { button.innerText = "Show details" text.innerText = "" showed = false } else { button.innerText = "Hide details" text.innerText = "Hello!" showed = true } } const root = document.getElementById('app'); const template = ( <div> <h1>Visibility Toggle</h1> <button onClick={controllDetails} id="button">Show details</button> <h2 id="text"></h2> </div> ) ReactDOM.render(template, root)
上記のようにかくと、
Uncaught TypeError: Cannot set property 'innerText' of null
というエラーが出ますが、
let showed = false const controllDetails = () => { let button = document.getElementById('button') let text = document.getElementById('text') if (showed) { button.innerText = "Show details" text.innerText = "" showed = false } else { button.innerText = "Hide details" text.innerText = "Hello!" showed = true } } const root = document.getElementById('app'); const template = ( <div> <h1>Visibility Toggle</h1> <button onClick={controllDetails} id="button">Show details</button> <h2 id="text"></h2> </div> ) ReactDOM.render(template, root)
とすると、問題なく動きます。buttonとtextの位置を変えたことによって解決します。
質問:これはなぜこのような挙動になるのかがわかりません。。。。 letのスコープが関係しているのでしょうか。しかし、showdedは問題なく動きます。。。
何卒よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/28 01:55