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

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

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

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

JavaScript

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

TypeScript

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

Q&A

解決済

1回答

738閲覧

typescriptでmaterial-uiを使ってアバターを複数人表示したい

otaaa

総合スコア19

Material-UI

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

JavaScript

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

TypeScript

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

0グッド

0クリップ

投稿2020/03/24 13:27

前提・実現したいこと

typescriptでmaterial-uiを使って複数人のアバターを表示したい。

Propsでemployeeだけが配列になっていて、
その中に入っている全てのnameの頭文字をとってアバターとしてを表示したいです。

イメージはこんな感じです

該当のソースコード

pcard.tsx

typescript

1import React, { useState } from 'react'; 2import { Project, Client, Employee } from '@/Domain/Entity'; 3import { 4 Avatar, 5 Card, 6 CardHeader, 7 CardActions, 8 CardContent, 9 Button, 10 Dialog, 11 DialogTitle, 12 DialogContent, 13 DialogContentText, 14 DialogActions, 15 Hidden, 16 IconButton, 17} from '@material-ui/core'; 18import { AvatarGroup } from '@material-ui/lab'; 19 20interface Props { 21 project: Project; 22 client: Client; 23 employees: Employee[]; 24 onArchive: (project: Project) => void; 25} 26export function ProjectCard(props: Props) { 27 const { project, client, employees, onArchive } = props; 28 29 return ( 30 31<Card > 32<CardHeader 33 avatar={ 34 <Avatar> 35 {client 36 ? client.orName.slice(0, 1).toUpperCase() 37 : ''} 38 </Avatar> 39 } 40 title={project.name} 41 42 /> 43 <CardContent> 44 <AvatarGroup max={3}> 45 <Avatar> 46 {employees ? employees[0].name.slice(0, 1) 47 .toUpperCase() : ''} 48 </Avatar> 49 </AvatarGroup> 50 </CardContent> 51</Card> 52); 53 54}

employee.ts

export interface EmployeeProps extends Timestamps { id: number; familyName: string; givenName: string; } export class Employee implements EmployeeProps { constructor( public familyName: string, public givenName: string, ) {} get name() { return `${this.familyName} ${this.givenName}`; } }

試したこと

typescript

1const aaa = employees.map(e => { 2 return ( 3 <Card key={project.id} className={classes.card}> 4<CardHeader 5 avatar={ 6 <Avatar> 7 {client 8 ? client.organizationName 9 .slice(0, 1) 10 .toUpperCase() 11 : ''} 12 </Avatar> 13 } 14 15 /> 16 <CardContent> 17 <AvatarGroup m={3}> 18 <Avatar> 19 {e ? e.name.slice(0, 1).toUpperCase() : ''} 20 </Avatar> 21 </AvatarGroup> 22 </CardContent> 23</Card> 24 ); 25 }); 26 return aaa; 27

このようにやると、
JSX element type 'Element[]' is not a constructor function for JSX elements.
Type 'Element[]' is missing the following properties from type 'Element': type, props, key
となり、pcardを使っている場所ではinterfaceのpropsの要素を必要としているためエラーが起きます。

自分ではこれ以上やり方が思いつかないので、分かる方がいましたら教えていただきたいです。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

自己解決

{employees.map(e=>{ return( <Avatar key=e.id> {e ? e.name.slice(0, 1) .toUpperCase() : ''} </Avatar> ); })}

このようにすると取り出せました

投稿2020/03/26 06:59

otaaa

総合スコア19

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問