質問は上記の通りで、Reactを学習中、より最新の記法に置き換えようとしたのですが、どうやってもsetStateが未定義になってしまいます。なお、テスト環境ですがBabelを使っています。
#Berore:正常に動作する方
html
1<!DOCTYPE html> 2<html dir="ltr" lang="ja" data-whatintent="keyboard"> 3<head> 4 <meta charset="UTF-8"> 5 <title>サンプル</title> 6 <link href="css/style.css" rel="stylesheet" type="text/css"> 7 <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script> 8 <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script> 9 <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.10.3/babel.min.js"></script> 10 <script type="text/babel"> 11 class App extends React.Component{ 12 constructor(){ 13 super(); 14 this.state = { 15 mes: '' 16 }; 17 this.changeText = this.changeText.bind(this); 18 } 19 changeText(e){ 20 this.setState({ mes :e.target.value }); 21 } 22 render(){ 23 return( 24 <div> 25 <input type="text" onChange={this.changeText} /> 26 <p>入力文字<span>{ this.state.mes }</span></p> 27 </div> 28 ); 29 } 30 } 31 ReactDOM.render( 32 <App />, 33 document.getElementById("root") 34 ); 35 </script> 36</head> 37<body> 38 <div id="root"></div> 39</body> 40</html>
この記法が古くなってきているというので、新たな記法を学習し、書き直したのがこれです。
##After:正常に動かない方
ただし、setStateをコメントアウトした場合、console.log(mes)の値は問題なく表示されます。
html
1<!DOCTYPE html> 2<html dir="ltr" lang="ja" data-whatintent="keyboard"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <title>サンプル</title> 7 <link href="css/style.css" rel="stylesheet" type="text/css"> 8<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script> 9<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script> 10<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.10.3/babel.min.js"></script> 11<script type="text/babel"> 12 //定義部分 13 function App(props){ 14 const mes = '' 15 //処理部分 16 let changeText = (e)=>{ 17 setState({mes: target.value}); 18 } 19 console.log(changeText); 20 return <div> 21 <input onChange={changeText} /> 22 <p>入力された文字<span>{ changeText.mes }</span></p> 23 </div>; 24 } 25 26 const elem = <App />; 27 //レンダリング処理 28 ReactDOM.render( 29 elem, 30 document.getElementById("root") 31 ); 32</script> 33</head> 34<body> 35 <div id="root"></div> 36</body> 37</html>
なお、このエラーを調べてみたところ、アロー関数での記法なら、changeText.bind(this)は不要とあったので、記載の有無も試してみましたが、解決には至りませんでした。
このBabelでは対応していないのかどうかも調べられなかった(別の件のsetState is undefinedばかりヒットする)ので、解決法をご存じの方、ご教授いただければ幸いです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/10 11:41
2020/01/10 11:54
2020/01/10 11:54
2020/01/10 12:13