前提・実現したいこと
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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/05 05:19 編集