ReactJSでAPIにアクセスしています。 Reactコンポーネントが、未定義である可能性があるAPIによって提供されるオブジェクトのプロパティにアクセスしているときにクラッシュするのを防ぐ最善の方法は何ですか?
エラーの例は次のとおりです。
TypeError:未定義のプロパティ 'items'を読み取れません
変数items
のプロパティx
にアクセスしようとしているようです。
また、x
がundefined
の場合、x.items
を呼び出すと、先ほど述べたエラーが発生します。
簡単なこと:
if (x) {
// CODE here
}
または
if (x && x.items) { // ensures both x and x.items are not undefined
// CODE here
}
編集:
オプションのチェーン を使用できるようになりました。
if (x?.items)
この投稿 は、reactアプリでのいくつかのエラー処理戦略について話します。
しかし、あなたの場合、try-catch句を使用するのが最も便利だと思います。
let results;
const resultsFallback = { items: [] };
try {
// assign results to res
// res would be an object that you get from API call
results = res.items;
// do stuff with items here
res.items.map(e => {
// do some stuff with elements in items property
})
} catch(e) {
// something wrong when getting results, set
// results to a fallback object.
results = resultsFallback;
}
私はこれを特定の厄介な反応コンポーネントの1つだけに使用していると思います。同様のタイプのエラーを処理する場合は、上記のブログ投稿でReactTryCatchBatchingStrategy
を使用することをお勧めします。
if(typeof x !=='undefined' && typeof x.item !=='undefined'){
}
render(){
return(
<div>
(typeof x !=='undefined' && typeof x.item !=='undefined')?
<div>success</div>:
<div>fail</div>
</div>
)
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
このような問題をチェックする最良の方法は、Googleのコンソールでテストコードを実行することです。 nullチェックの場合と同様に、単純にif(!x)
またはif(x==undefined)
をチェックできます。