2017-09-04 11 views
0

APIから取得するJSON応答には、時々nullの値を持つ特定のプロパティがあります。私はJSXを使用していて、レスポンスで.mapに行き、別のコンポーネントに小道具を渡します。 APIから受け取ったnull以外の値またはを私の選択した文字列にしたい。私は同じ結果を持つ複数のものを試しました:Cannot read property url of undefinednullの可能性があるオブジェクトのプロパティに変数の値を条件付きで割り当てます。

{posts.map((post, index) => { 
      let p = null 
      if (typeof post.default_image.url == null) { 
      p = "via.placeholder.com/350x150" 
      } 
      return <Post 
         key={index} 
         imageUrl={post.default_image.url ? "hi" : "bye"} 
         /> 
      })} 

と同様に

let url = typeof post.default_image.url == null ? default_image.url : "via.placeholder.com/350x150" 

をして、どのように私はこれをやって行くことができるimageUrl={url}

のようにのようにそれを伝承:

これは私が試した何ですか?

+0

は、あなたの代わりに 'typeof演算post.default_image.url ==「undefined''を必要としないのですか? – Andy

答えて

1

default_imageが存在しないため、何もないプロパティを取得できないためです。 (と呼ばれる短絡;)その

let p = post.default_value && post.default_value.url || "via.placeholder.com/350x150"; 

をチェックし、はいその働きがあります)

+0

ああ、私の最初の試みは短絡していましたが、私は 'let p = post.default_value.url || "via.placeholder.com/350x150"; default_valueの初期チェックなし。..ありがとう! – mycellius

1

typeof <anything here>決してはnullに等しくなります。 Even typeof null is "object"。私はあなたが何をしようとして考える

はこれです:

let url = (post && post.default_image && post.default_image.url) 
    ? post.default_image.url 
    : "via.placeholder.com/350x150" 
+0

どのような畳み込み解答;) –

+0

@あなたのコードよりもコードが冗長ですが、私は正直なところ、あなたの例で使用されているようにJSの短絡に慣れていない人にとって、 OPのオリジナルソリューションにも近い。 – Jamiec

関連する問題