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

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

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

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

TypeScript

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

React.js

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

Q&A

解決済

1回答

1615閲覧

react データから取得した複数の値をmapする

退会済みユーザー

退会済みユーザー

総合スコア0

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

TypeScript

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

React.js

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

1グッド

2クリップ

投稿2020/10/07 05:26

編集2020/10/07 06:40

react typescriptを使って開発をしています。
dataから取得した値を users, names, agess,に入れて共通のCardコンポーネントにpropsとしてデータをわたしmapで回して表示させたいです。
dataの中身の変数がそれぞれ違うためどう実装したらいいのでしょうか?
わかる人いましたらご教授お願いしたいです

import React, { FunctionComponent } from 'react'; import { IUsers, INames, IAges, } from 'domain/type.ts'; type Props = { data: IUsers | INames | IAges; }; export const Card: FunctionComponent<Props> = ({ data, }) => { return ( <div> <span> {data.{// ここにそれぞれの配列で回してあげたい変数を入れたい}.map((d, i) => ( <div key={i}> <p>{d}</p> </div> ))} </div> ); };
// 親コンポーネント <Card name={'user'} data={users} ></Card> <Card name={'names'} data={names} ></Card> <Card name={'ages'} data={ages} ></Card>
// usersの中身 { users: ["aaa", "aaaa", "aaaaa"] } // namesの中身 {  names: ["あああ", "あああ" "あああ","あああ","あああ"] } // agesの中身 { age_group: [ { id: 1 name: "20"   }, {    id: 2 name: "21" } ] }
whiwhdiw👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは

以下のようなTAge型 と TData

typescript

1type TAge = {id: number; name: string} 2type TData = string | TAge

を作っておき、

typescript

1interface IUsers { 2 users: string[] 3} 4 5interface INames { 6 names: string[] 7} 8 9interface IAges { 10 age_group: TAge[] 11}

であるとすると、下記でいけるかと思います。

tsx

1type Props = { 2 data: IUsers | INames | IAges 3} 4 5const Card: FunctionComponent<Props> = ({ data }) => { 6 return ( 7 <div> 8 {Object.values(data)[0].map((d: TData, i: number) => ( 9 <div key={i}> 10 <p>{JSON.stringify(d)}</p> 11 </div> 12 ))} 13 </div> 14 ); 15}

参考になれば幸いです。

投稿2020/10/07 07:00

jun68ykt

総合スコア9058

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

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

退会済みユーザー

退会済みユーザー

2020/10/07 11:20

解決できました! ありがとうございます! TAgeとTDataをinterfaseではなくtypeを使っているのはなぜなのでしょうか? interfaseとtypeの使い分けがわかっておらず、、、 またObject.valueとはdataの中の配列の部分だけを取得しているという認識であっていますか?
jun68ykt

2020/10/07 17:59

どういたしまして。 > TAgeとTDataをinterfaseではなくtypeを使っているのはなぜなのでしょうか? TAge のほうはinterfaceにして interface IAge { id: number name: string } でもよいです。この IAge を使って type TData = string | IAge と書けます。ですが、TData のほうは interface IData = string | IAge とは書けない(書くとエラーになります)ので、type TData にする必要があります。 > またObject.valueとはdataの中の配列の部分だけを取得しているという認識であっていますか? はい。結果としてそうなります。 Object.values() メソッド https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/values は引数で与えられるオブジェクトに含まれる、すべてのプロパティの値だけを取り出して配列にします。今回は、IUsers, INames, IAges のどれもプロパティを1個しか含まないことが分かっているので、 Object.values(data)[0] によって、data が含む(users, names, age_group のいずれかの値である)配列を取り出せます。
退会済みユーザー

退会済みユーザー

2020/10/08 06:51

ご丁寧に説明していただきありがとうございます! とてもいい勉強になりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問