Reactを勉強し始めて1週間目。独学でビンゴゲームの製作を試みています。
以下のようなプログラムでstartボタンを押したら0~99の間の数字をランダムに画面に表示、二回目にユーザーがボタンを押すとルーレットが停止し、その時画面に表示されている数字をそのラウンドで選ばれた数字として登録、また以降のラウンドで選ばれないようにしたいです。
作り始めた際には正常に操作することのできていた"yetNumber"という配列が、プログラムを組んでいくうちに以下のエラーメッセージとともに操作できなくなってしまいました。
react
1class App extends React.Component { 2 constructor(props) { 3 super(props); 4 this.state = {value: 0, 5 newNumber: 0, 6 btnValue: 'true' 7 }; 8 this.yetNumber = Array.from({length: 100}, (_, i) => i); //default arrary for playing game 9 this.alreadyNumber = []; // to rememmber the numbers that have chozen already 10 } 11 12 removeNum = (num) =>{ 13 this.yetNumber.splice(num, 1); //delete the number that showed on display 14 this.alreadyNumber.push(num); //make a array with numbers that showed on display 15 } 16 17 start = (range, intervalId) => { 18 19 intervalId = setInterval(()=>{ //repeat till player stop 20 let i = Math.floor( Math.random() * range); // make a index number randamly 21 this.setState({value: this.yetNumber[i]}); // show up the number 22 },50 23 ); 24 } 25 26 roulette(e) { 27 let text = e.target.innnerHTML; //change the text either start or stop 28 if(text === 'START'){ 29 text= 'STOP' 30 }else{ 31 text= 'START' 32 }; 33 34 let range = this.yetNumber.length +1; //determine currently length of the array 35 let intervalId = null; // for repeat function 36 37 if(this.btnValue === 'true'){ 38 this.setState({btnValue: 'false'}) // so that program can go to else at second time 39 this.start(range, intervalId); 40 }else{ 41 clearInterval(this.state.intervalId); // stop the start function 42 this.setState({newNumber: this.state.value}); 43 this.removeNum(this.state.value); 44 intervalId = null; 45 this.setState({btnValue: 'true'}) 46 } 47 48 } 49 50 render() { 51 52 return ( 53 <div className="app"> 54 <div className="displayArea"> 55 {this.state.value} 56 </div> 57 <div className="buttonArea"> 58 <button type="button" onClick={this.roulette}> 59 START 60 </button>
以下がchromeで実行した際のエラーメッセージです。
App.js:40 Uncaught TypeError: Cannot read property 'yetNumber' of undefined
roulette関数を書き始める前はthis.yetNumberでconsole.log等アクセスすることができていました。
回答とは関係ないですが、記述方法が古くないですかね?
せっかく勉強するのであれば新しいバージョンで勉強したほうが良いですよ!
関係ないコメント失礼しました。
回答1件
あなたの回答
tips
プレビュー