質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

207閲覧

Reactで一番番号が早いもののうち、カウントされている子要素を使いたい

k10a

総合スコア35

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2018/10/15 16:59

カートに1つ以上のバッチがついているアイテムのうち、番号が早いものを優先に1つだけイメージを表示する仕組みを、Reactで実装したいと考えているのですがTypeErrorが出てしまい困っています。

エラー内容

おそらく、levelの取り方が間違っているのかもしれません。
あるいは、この時点では取得ができないのかもしれません。

TypeError: Cannot read property 'batch' of undefined

ソースコード

JavaScript

1// items, cartItemsを定義する 2const items = response.item_list.map((item, index) => ({ 3 batch: 0, 4・・・・ 5}); 6const cartItems = []; 7 8// 表示部分 9render() { 10 // cartItemsを取ってくる 11 const cartItems = this.state.cartItems; 12 return ( 13 // cartItemsの番号が早いもの順で1以上バッチがついているものを探す 14 {cartItems === [] ? ( 15 <div /> 16 ) : cartItems[0].batch > 0 ? ( 17 <div> 18 <img src={items[0].image} alt="" /> 19 </div> 20 ) : cartItems[1].batch > 0 ? ( 21 <div> 22 <img src={items[1].image} alt="" /> 23 </div> 24 ) : cartItems[2].batch > 0 ? ( 25 <div> 26 <img src={items[2].image} alt="" /> 27 </div> 28 ) : ( 29 <div /> 30 )} 31 ) 32}

cartItemsが無理そうであれば、itemsのインデックスを使って処理するのも可能なのですが、同様のエラーが発生しています。

また、console.logをやってみると、items、cartItemsともに、batchは子要素として表示されています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。
render() の中で、 cartItems が空配列であるかどうかの判定を、以下のように修正してみるといかがでしょうか?

修正前:

javascript

1{cartItems === [] ? (

  

修正後:

javascript

1{(!cartItems || cartItems.length === 0) ? (

または、cartItemsは undefined や null にならないことが分かっているならば、

javascript

1{cartItems.length === 0 ? (

  
確認したほうがよい基礎知識としては、

  • cartItems が空の配列であっても cartItems === []は true にはならない

ことです。以下は node のREPLからこれを確認したところです。

イメージ説明

以上参考になれば幸いです。

投稿2018/10/15 21:34

jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k10a

2018/10/16 01:19

jun68yktさま、ご丁寧なご回答をいただきまして誠にありがとうございます。 無事解決いたしました。
jun68ykt

2018/10/16 01:37

解決されたとのことで、よかったです ????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問