[解決済み] Error : 未定義のプロパティ 'map' を読み取ることができません。
2021-12-28 22:43:13
reactを使って、あるコンポーネントの状態値を別のコンポーネントに渡すために、次のコードを書いています。
// 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'));
このコードを実行すると、次のようなエラーが発生します。
Cannot read property 'map' of undefined'
がスローされます。
map
の関数は
CommentList
コンポーネントが実行されます。
何が原因で
prop
になります。
undefined
から渡すとき
CommentBox
を
CommentList
?
解決方法は?
まず、より安全な初期データを設定します。
getInitialState : function() {
return {data: {comments:[]}};
},
そして、ajaxデータを確保します。
上記の2つの手順で、以下のようにすればうまくいくはずです。 デモ
更新:.mapブロックを条件文でくくるだけでいいんですね。
if (this.props.data) {
var commentNodes = this.props.data.map(function (comment){
return (
<div>
<h1>{comment.author}</h1>
</div>
);
});
}
関連
-
Vueはランニングライト形式のテキストを水平方向にスクロールする機能を実装している
-
vueのグローバルがscss(mixin)を導入。
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
vueが定義するプライベートフィルタと基本的な使い方
-
Vueでルートネスティングを実装する例
-
Vueのフィルタの説明
-
[解決済み】React - uncaught TypeError: 未定義のプロパティ 'setState' を読み取れない
-
[解決済み】TypeError: Router.use() はミドルウェアの関数を要求しているが、Object を取得した。
-
[解決済み] 期待される代入または関数呼び出し: 未使用式なし ReactJS
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
Vueがechartsのtooltipにクリックイベントを追加するケーススタディ
-
要素ツリー制御によるvueTreeテーブル
-
WeChatアプレット用ユニアプリによるグローバルシェアリング
-
JavaScriptのクロージャの説明
-
Vueでルートネスティングを実装する例
-
vueのプロジェクトでモックを使用する方法を知っていますか?
-
Vueのフォームイベントのデータバインディングの説明
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】TypeError: Router.use() はミドルウェアの関数を要求しているが、Object を取得した。
-
JavaScriptのStringに関する共通メソッド