[解決済み] エラー: 未定義のプロパティ 'map' を読み取ることができません。
2022-01-30 15:35:51
質問
を追っています。
reactjs
チュートリアルで、次のような問題に遭遇します。
あるコンポーネントの状態から別のコンポーネントに値を渡す
.
エラー
Cannot read property 'map' of undefined'
がスローされます。
map
の関数を使用します。
CommentList
コンポーネントが実行されます。
何が原因で
prop
になります。undefined
から渡すときCommentBox
の中に入っています。CommentList
?
// First component
var CommentList = React.createClass({
render: function() {
var commentNodes = this.props.data.map(function (comment){
return <div><h1>{comment.author}</h1></div>;
});
return <div className="commentList">{commentNodes}</div>;
}
});
// Second component
var CommentBox = React.createClass({
getInitialState: function(){
return {data: []};
},
getComments: function(){
$.ajax({
url: this.props.url,
dataType: 'json',
success: function(data){ this.setState({data: data}) }.bind(this),
error: function(xhr, status, err){ console.error(url, status, err.toString()) }.bind(this)
});
},
componentWillMount: function(){
this.getComments()
},
render: function(){
return <div className="commentBox">{<CommentList data={this.state.data.comments}/>}</div>;
}
});
React.renderComponent( <CommentBox url="comments.json" />, document.getElementById('content'));
解決するには?
まず、安全な初期データを多めに設定します。
プレgetInitialState : function() {
return {data: {comments:[]}};
},
そして、ajaxのデータを確保します。
上記の2つの手順に従って、以下のように動作するはずです。 デモ
更新:.mapブロックを条件文で囲むだけでOKです。
if (this.props.data) {
var commentNodes = this.props.data.map(function (comment){
return (
<div>
<h1>{comment.author}</h1>
</div>
);
});
}
関連
-
[解決済み】Typescript react - モジュール ''react-materialize'' の宣言ファイルが見つかりませんでした。'path/to/module-name.js' は暗黙のうちに any 型を持ちます。
-
[解決済み] テスト
-
[解決済み] react-router-domを使用する際に「Function components cannot be given refs」を回避するにはどうすればよいですか?
-
[解決済み] useStateプロパティのフックにmap関数を使用する方法
-
[解決済み] ReactJS: Warning: setState(...): 既存の状態遷移の間に更新することはできません
-
[解決済み] sh: react-scripts: npm start の実行後にコマンドが見つからない。
-
[解決済み] Webpack のコンパイルに失敗した
-
[解決済み] ReactJs "インバリアント違反..." リアクトの古典的な問題
-
[解決済み] Reactプロジェクトに.envファイルを追加する
-
[解決済み] React - uncaught TypeError: 未定義のプロパティ 'setState' を読み取れない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Reactを使用したMapBoxのCSSが欠落している件
-
[解決済み】ReactJS: マテリアルuiのブレークポイントについて
-
[解決済み】Reactでclsxを使用する方法
-
[解決済み】プリセットファイルはオブジェクトのエクスポートができない
-
[解決済み] Apolloクライアントでログアウトした後、ストアをリセットする
-
[解決済み] マテリアルUIセレクトフィールドのマルチセレクト
-
[解決済み] react - createMuiThemeとcreateThemeの違い。
-
[解決済み] react jsでウィンドウを開くイベントを処理するにはどうすればよいですか?
-
[解決済み] create-react-appビルドスクリプトを実行する際に、ビルド.env変数を設定するには?
-
[解決済み] React JSXのforEach()でHTMLが出力されない