Reactでmapが使えない
Reactでマインスイーパーを作っていますが、map関数でエラーが出てしまいます。
なぜmap関数が使えないのか教えてください。
参考動画↓
https://www.youtube.com/watch?v=BLdd0zP-tAw
この方の動画の23分頃と同じソースコードです
発生している問題・エラーメッセージ
TypeError: Cannot read property 'map' of undefined
該当のソースコード
Board.js
import React, { useState, useEffect } from "react"; import CreateBoard from "../util/CreateBoard"; const Board = () =>{ //↓フック: const [オブジェクト, オブジェクトを変更する時呼び出すメソッド] = useState(変数の初期値) // メリットクラスを書かずにstateを利用できる const [grid, setGrid] = useState([]); useEffect(() => { function freshBoard(){ const newBoard = CreateBoard(5, 5, 10); setGrid(newBoard); } freshBoard(); }, []); /*if(!grid.board){ return <div>Loading</div>; } */ // ↓ここがエラーのmapです return grid.board.map(singleRow=>{ return <div>{JSON.stringify(singleRow)}</div> }); }; export default Board;
追加のコード
CreateBoard.js
export default (row, col, bombs) => { let board = []; /*1行に列数分のマスデータを格納している配列 を行数分格納する配列 */ let mineLocation = []; //ボムの場所を格納する配列 //空白のボード作成 //マスの情報を初期化 for(let x = 0; x < row; x++){ //横列の初期化 let subCol =[]; //1行に列数分のマスデータを格納する配列 for(let y = 0; y < col; y++){ //縦列の初期化 //push(): 配列の末尾に要素を追加 subCol.push( { value: 0, revealed: false, x: x, y: y, flagged: false, } ); } board.push(subCol); } //ボムの場所をランダムで決める let bombsCount = 0; while (bombsCount < bombs){ //0 ~ 行数(列数)-1 乱数取得 let x = randomNum(0, row - 1); let y = randomNum(0, col - 1); //valueが0の時はボム判定 if(board[x][y].value === 0){ //ボムをXで表示 board[x][y].value = "X"; //ボムの場所を格納 mineLocation.push([x,y]); //ボムの数をカウント bombsCount++; } } //マスの周りのボムの数を決める for(let roww = 0; roww < row; roww++){ for(let coll = 0; coll < col; col++){ if(board[roww][coll].value === "X"){ //対象マスがボムであったとき continue; } //対象マスの真上 if(roww > 0 && board[roww - 1][coll].value === "X"){ board[roww][coll].value++; } //対象マスの右上 if ( roww > 0 && coll < col - 1 && board[roww - 1][coll + 1].value === "X" ) { board[roww][coll].value++; } // 対象マスの右 if (coll < col - 1 && board[roww][coll + 1].value === "X") { board[roww][coll].value++; } // 対象マスの右下 if ( roww < row - 1 && coll < col - 1 && board[roww + 1][coll + 1].value === "X" ) { board[roww][coll].value++; } // 対象マスの真下 if (roww < row - 1 && board[roww + 1][coll].value === "X") { board[roww][coll].value++; } // 対象マスの左下 if ( roww < row - 1 && coll > 0 && board[roww + 1][coll - 1].value === "X" ) { board[roww][coll].value++; } // 対象マスの左 if (coll > 0 && board[roww][coll - 1].value === "X") { board[roww][coll].value++; } // 対象マスの左上 if (roww > 0 && coll > 0 && board[roww - 1][coll - 1].value === "X") { board[roww][coll].value++; } } } return {board, mineLocation}; }; //ランダム関数 function randomNum(min = 0,max){ return Math.floor(Math.random() * (max - min + 1) + min); }
試したこと
ソースコードの確認
エラー文の検索
補足情報(FW/ツールのバージョンなど)
Node.jsはインストール済みです。
バージョンは12.19.0です
npmは
6.14.8です
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/16 07:23
2020/11/16 07:30
2020/11/16 07:36
2020/11/17 05:02
2020/11/17 05:17
2020/11/19 01:37
2020/11/19 01:47
2020/11/19 01:53
2020/11/19 02:00
2020/11/19 03:10
2020/11/20 00:34