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

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

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

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

Q&A

解決済

1回答

3962閲覧

配列の初期値が[]である場合にlength情報を取得する

k10a

総合スコア35

React.js

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

0グッド

0クリップ

投稿2018/07/27 06:33

編集2018/07/27 11:56

前提・実現したいこと

前回質問したように表示方法が分かれる配列をこちらで質問させていただきました。
https://teratail.com/questions/137796

いただいた丁寧なコードを参考に既存の配列を並べることはできたのですが、まだ選択されていない配列を用意しようとすると、下記のエラーが生じてしまいます。

Thumbnails(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.

試してみたこと

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_array_length

a.length = Math.max(0, a.length - 1);

上記の表記を試みましたが、結果は取得できませんでした。

ソースコード

constructor(props) { super(props); this.imageUrls = [ 'https://dummyimage.com/360x240/f29b91/fff&text=1', 'https://dummyimage.com/360x240/efbd40/fff&text=2', 'https://dummyimage.com/360x240/81d654/fff&text=3', 'https://dummyimage.com/360x240/f092c4/fff&text=4', ]; }

JavaScript

1import React from 'react'; 2 3const Thumbnails = ({mainImageIndex, imageUrls}) => { 4 <div className="thumbs"> 5 {!imageUrls.length ? ( 6 <div>Not choosen yet</div> 7 ) : ( 8 [...Array(imageUrls.length-1)].map((_, i) => 9 <div key={i}> 10 <img src={imageUrls[(mainImageIndex + i + 1) % imageUrls.length]} /> 11 </div> 12 )) 13 } 14 </div> 15}; 16 17export default Thumbnails;

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

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

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

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

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

guest

回答1

0

ベストアンサー

そして、配列で取得したアイテムのnameを取得したいのですが、下記の表記だとnameエラーとなってしまいます。

質問文を整理してください。

<div key={i}>

index を key に与えるのは事故るのでやめるべきですね。思いがけない動作をします。

<p>{selectedItems(name)[(mainImageIndex + i + 1) % items.length]}</p>

上の提示のコード中は何をされてるんですか?
selectedItems って配列ですよね?

本題

何が目的か分かりませんが、選択された items の name を表示したいのならば以下のほうが簡潔明快かと思います。
selectedItems は選択された items の id が入った配列と仮定しています。
key に id を指定しているのは id が絶対に重複しない一意である(Identifier)と仮定しているため。

const Thumbnails = ({ item, selectedItems }) => ( <div className="thumbs"> {!selectedItems.length ? ( null ) : ( selectedItems.map(id => ( <p key={id}>{items.find(item => item.id === id).name}</p> )) )} </div> );

投稿2018/07/27 07:09

編集2018/07/27 07:12
og24715

総合スコア832

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

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

k10a

2018/07/27 11:51

og24715さま、ご丁寧な回答をいただきまして誠にありがとうございます。 ご指摘の通り、こちらの質問意図が分かりづらい内容となっていました。 今一度質問内容を更新させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問