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

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

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

Material-UIは、Material Designを利用可能なオープンソースのReact向けUIコンポーネントキットです。

JavaScript

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

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

Q&A

解決済

1回答

4323閲覧

TypeScriptのmap()を使用した際のkeyエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Material-UI

Material-UIは、Material Designを利用可能なオープンソースのReact向けUIコンポーネントキットです。

JavaScript

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

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

0グッド

0クリップ

投稿2020/02/03 10:15

概要

現在、TypeScript + React + Material-UIを用いた開発を行っています。
その中でオブジェクトをmap()で回して表示しているのですが、下記の様なエラーが発生いたしました。
差分表示の際にユニークなkeyを使用した方がパフォーマンスがよくなるということは理解しているのですが、何か勘違いをしているのか、中々エラーが消えてくれません。
自分なりに色々しらべてみましたが解決せず…。
どなたか解決方法のご教授よろしくお願い致します。

エラーの内容

index.js:1 Warning: Each child in a list should have a unique "key" prop.

該当するコード

import React from 'react' import { useSelector } from 'react-redux' import styled from 'styled-components' import { createStyles, makeStyles, Theme } from '@material-ui/core/styles' import TreeView from '@material-ui/lab/TreeView' import ExpandMoreIcon from '@material-ui/icons/ExpandMore' import ChevronRightIcon from '@material-ui/icons/ChevronRight' import TreeItem from '@material-ui/lab/TreeItem' const useStyles = makeStyles((theme: Theme) => createStyles({ toolbar: { ...theme.mixins.toolbar }, })) const History: React.FC = () => { const classes = useStyles() // historiesにはreduxのstoreから取得した、オブジェクトの配列が格納されています。 const histories = useSelector((state: any) => state.HistoryReducer.histories) return ( <Root> <div className={classes.toolbar} /> <H1>購入履歴</H1> <TreeView defaultCollapseIcon={<ExpandMoreIcon />} defaultExpandIcon={<ChevronRightIcon />} > // ここです { histories.map((history: any, i: string) => ( <> <TreeItem key={i} nodeId={i} label={`${history.date} ` + `${history.store.address} ` + `${history.company.name} ` + `¥${history.sum}`}> // ここです {history.products.map((product: any, j: string) => ( <> <TreeItem key={j} nodeId={i} label={`${product.name}  ` + `¥${product.price}`}> </TreeItem> </> ))} </TreeItem> </> )) } </TreeView> </Root > ) } const Root = styled.div` padding-bottom: 50px; ` const H1 = styled.h1` text-align: center; ` export default History

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

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

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

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

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

guest

回答1

0

ベストアンサー

typescript

1 histories.map((history: any, i: string) => ( 2 <>

のようになっていますので、キーは<>に与える必要があります。ただ、この記法のままではキーをセットできませんので、<React.Fragment key={i}>のようにしてください(閉じタグも</React.Fragment>とします)。

投稿2020/02/03 10:24

maisumakun

総合スコア145184

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問