質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Material-UI

Material-UIは、Material Designを利用可能なオープンソースのReact向けUIコンポーネントキットです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

2106閲覧

Reactエラー「'map' of undefined」の解決

guuuuuuuuura

総合スコア11

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Material-UI

Material-UIは、Material Designを利用可能なオープンソースのReact向けUIコンポーネントキットです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2020/11/05 04:27

前提・実現したいこと

React・Firebase・MaterialーUIを用いたチャットボットアプリを作成中に
map関数を使用後エラーが表示されたため、原因究明および解決にご教授ください。

発生している問題・エラーメッセージ

イメージ説明

該当のソースコード (ファイル名:AnswersList.jsx)

React

1 2import React from 'react' 3import {Answer} from './index' 4 5// Answerコンポーネントのpropsを受け継ぐ 6const AnswersList = (props) => { 7 return ( 8 <div className="c-grid__answer"> 9 {props.answers.map((value, index) => { 10 {/* Answerコンポーネントを変数contentに代入してインスタンスを生成している */} 11 return <Answer content={value.content} key={index.toString()} /> 12 })} 13 </div> 14 ) 15} 16 17export default AnswersList

その他のソースコード (ファイル名:.index.js)

JS

1// エントリーポイント 2export {default as AnswersList} from './AnswersList.jsx' 3export {default as Answer} from './Answer.jsx'

その他のソースコード (ファイル名:.dataset.js)

JS

1const defaultDataset = { 2 "init": { 3 answers: [ 4 {content: "仕事を依頼したい", nextId: "job_offer"}, 5 {content: "エンジニアのキャリアについて相談したい", nextId: "consultant"}, 6 {content: "学習コミュニティについて知りたい", nextId: "community"}, 7 {content: "お付き合いしたい", nextId: "dating"}, 8 ], 9 question: "こんにちは!????トラハックへのご用件はなんでしょうか?", 10 }, 11 "job_offer": { 12 answers: [ 13 {content: "Webサイトを制作してほしい", nextId: "website"}, 14 {content: "Webアプリを開発してほしい", nextId: "webapp"}, 15 {content: "自動化ツールを作ってほしい", nextId: "automation_tool"}, 16 {content: "その他", nextId: "other_jobs"} 17 ], 18 question: "どのようなお仕事でしょうか?", 19 }, 20 "website": { 21 answers: [ 22 {content: "問い合わせる", nextId: "contact"}, 23 {content: "最初の質問に戻る", nextId: "init"} 24 ], 25 question: "Webサイト細作についてですね。コチラからお問い合わせできます。", 26 }, 27 "webapp": { 28 answers: [ 29 {content: "問い合わせる", nextId: "contact"}, 30 {content: "最初の質問に戻る", nextId: "init"} 31 ], 32 question: "Webアプリ開発についてですね。コチラからお問い合わせできます。", 33 }, 34 "automation_tool": { 35 answers: [ 36 {content: "問い合わせる", nextId: "contact"}, 37 {content: "最初の質問に戻る", nextId: "init"} 38 ], 39 question: "自動化ツール開発についてですね。コチラからお問い合わせできます。", 40 }, 41 "other_jobs": { 42 answers: [ 43 {content: "問い合わせる", nextId: "contact"}, 44 {content: "最初の質問に戻る", nextId: "init"} 45 ], 46 question: "その他についてですね。コチラからお問い合わせできます。", 47 }, 48 "consultant": { 49 answers: [ 50 {content: "YouTubeで動画を見る", nextId: "https://www.youtube.com/channel/UC-bOAxx-YOsviSmqh8COR0w"}, 51 {content: "学習コミュニティについて知りたい", nextId: "community"}, 52 {content: "最初の質問に戻る", nextId: "init"} 53 ], 54 question: "トラハックは普段からYouTubeでキャリアについて発信しています。また、僕が運営するエンジニア向け学習コミュニティ内でも相談に乗っていますよ。", 55 }, 56 "community": { 57 answers: [ 58 {content: "どんな活動をしているの?", nextId: "community_activity"}, 59 {content: "コミュニティに参加したい", nextId: "https://torahack.web.app/community/"}, 60 {content: "最初の質問に戻る", nextId: "init"} 61 ], 62 question: "2020年3月から学習コミュニティを始めました!????Webエンジニアへの転職を目指す人向けに、プログラミングを教えたりキャリアの相談に乗っています。", 63 }, 64 "community_activity": { 65 answers: [ 66 {content: "さらに詳細を知りたい", nextId: "https://youtu.be/tIzE7hUDbBM"}, 67 {content: "コミュニティに参加したい", nextId: "https://torahack.web.app/community/"}, 68 {content: "最初の質問に戻る", nextId: "init"} 69 ], 70 question: "フロントエンド向けの教材の提供、キャリアや勉強法に関するメルマガの配信、週1のオンライン作業会などを開催しています!\n詳細はYouTube動画で紹介しています。", 71 }, 72 "dating": { 73 answers: [ 74 {content: "DMする", nextId: "https://twitter.com/torahack_"}, 75 {content: "最初の質問に戻る", nextId: "init"} 76 ], 77 question: "まずは一緒にランチでもいかがですか?DMしてください????", 78 }, 79} 80 81export default defaultDataset //外部クラスからインポート可能にしている

その他のソースコード (ファイル名:.Answer.jsx)

React

1import REACT from 'react'; 2import { makeStyles } from '@material-ui/core/styles'; //material-uiをインポート 3import Button from '@material-ui/core/Button'; 4 5const useStyles = makeStyles((theme) => ({ 6 root: { 7 }, 8})); 9 10const Answer = (props) => { 11 12 // const classes = useStyles(); 今は使わない 13 14 return( 15 // material-uiのButtonコンポーネントを呼び出す 16 <Button variant="contained" color="primary"> 17 {props.content} 18 </Button> 19 ) 20} 21 22export default Answer

その他のソースコード (ファイル名:.App.jsx)

React

1import React from 'react'; 2import defaultDataset from "./dataset.js"; 3import './style.css'; 4import {AnswersList} from './components/index.js'; 5 6export default class App extends React.Component { 7 // 初期状態へ戻すコンストラクタ定義 8 constructor(props) { 9 super(props); 10 this.state = { 11 answers: [], 12 chats: [], 13 currentId: "init", 14 dataset: defaultDataset, 15 open: false 16 } 17 } 18 19 // コンストラクタフィールドのanswersに値を代入するメソッド 20 initAnswer = () => { 21 // コンストラクタフィールドのdatasetの値を変数へ代入している 22 // datasetの配列データはコンストラクタフィールドのcurrentIdから代入している 23 // datasetが連想配列であるため、currentIdの値を配列で指定する必要がある 24 const initDataset = this.state.dataset[this.state.currentId] 25 // 指定したcurrentIdのanswersを変数へ代入している 26 const initAnswers = initDataset.answers 27 28 // 受け取ったanswersの内容を現在のstateとする 29 this.setState({ 30 answers: this.initAnswers 31 }) 32 } 33 34 // 最初のrenderが走ったあとに実行される 35 componentDidMount() { 36 this.initAnswer() 37 } 38 39 // stateが書き換わる度にrenderが実行される 40 render() { 41 return ( 42 <section className="c-section"> 43 <div className="c-box"> 44 {/* AnswersListコンポーネントを変数answerに代入してインスタンスを生成している */} 45 {/* this.state.answerはコンストラクタのanswerを表している */} 46 <AnswersList answers={this.state.answers} /> 47 </div> 48 </section> 49 ); 50 } 51} 52

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

props.answers.mapでエラーとのことなので、
console.log(props.answers)で確認しながら、どこで値の受け渡しに失敗しているかを調べる必要があると思います。

ざっと見た感じでは、

javascript

1this.setState({ 2 answers: this.initAnswers 3})

おそらくここだと思います。
this.initAnswersではなくinitAnswersが正しいのではないでしょうか?

投稿2020/11/05 04:33

nekoniki

総合スコア2411

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guuuuuuuuura

2020/11/05 05:19 編集

nekonikiさんのおっしゃる通りに訂正したところ、エラーが解決いたしました。 ありがとうございます。 thisをつけてしまうとprops.initAnswersという存在しない関数を呼び出すことになるのでしょうか。 もっと勉強します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問