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

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

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

Stataは、StataCorp社が開発した統計分析ソフトウェア。手軽に操作でき、高速で正確に演算することが可能です。全ての分析機能に再現性があり、ドキュメント化できます。経済学や社会学、政治学などの領域を中心に用いられています。

onclick

onclickとはユーザーのクリック処理を指します。これは"onmousedown"(押下)と"onmouseup"(押上)の二つの事象の組み合わせです

TypeScript

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

React.js

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

Q&A

解決済

1回答

299閲覧

reactのpropsで渡しているデータのデフォルトデータを作りたい

tomy1123

総合スコア6

Stata

Stataは、StataCorp社が開発した統計分析ソフトウェア。手軽に操作でき、高速で正確に演算することが可能です。全ての分析機能に再現性があり、ドキュメント化できます。経済学や社会学、政治学などの領域を中心に用いられています。

onclick

onclickとはユーザーのクリック処理を指します。これは"onmousedown"(押下)と"onmouseup"(押上)の二つの事象の組み合わせです

TypeScript

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

React.js

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

0グッド

0クリップ

投稿2023/08/02 05:15

編集2023/08/02 05:20

実現したいこと

ローカルでデータを確認するためにテストデータを作り、propsにデフォルトデータとして渡したいのですが、型チェックなどがあり、どういうデータの書き方をすればよいか分からないため、ご教授いただきたいです。

該当のソースコード

type User { address: String phone_number: [String] }
import { User } from '../../UserType' type Props = { data: any | undefined, } const UserData = ({data}:Props) => { const users = data ?? [] as User[] return ( <div> {users .map((user: User, index: any) => ( <div>{user.address}</div> ))} </div> } export default UserData

試したこと

const testData = {"address": "test", "phone_number": ["12345"]}
上記を定義し、
const UserData = ({data = testData}:Props) => {
と記述したのですが、うまく表示されませんでした。
データの構造が合っていないからでしょうか?

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

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

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

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

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

hoshi-takanori

2023/08/02 05:35

UserData の引数 props がまるごと省略された場合にはデフォルト引数を設定できますが、props.data など部分的に省略された場合はできないはず。 const users = data ?? [] as User[] の部分でデフォルト値を設定すればいいのでは。ってか、data の型は any なのか User なのか User[] なのか…。
tomy1123

2023/08/02 05:51

propsをまるごと省略します。 const users = {"address": "test", "phone_number": ["12345"]}と設定してみたのですがうまくいきませんでした。 配列の作り方が間違っているのでしょうか? エラーが解消できずanyを外せなくて…。
maisumakun

2023/08/02 05:57

> うまくいきませんでした。 具体的に、どうなるのですか? エラーメッセージなどが出ている状態なら、それをご提示ください。
tomy1123

2023/08/02 06:04

console.logでdataを確認したのですが、中に情報が入ってなかったです。
maisumakun

2023/08/02 06:05

UserDataを呼び出す側のコードはどのようになっていますか?
tomy1123

2023/08/02 06:36

下記になります。 SearchDialogで入力された値でDBに検索しに行き、帰ってきたデータをUserDataに渡しています import { useState } from 'react' import { QueryHookOptions } from '@apollo/client' import { Box } from '@mui/material' import { useGetUsersByTest } from '../api/get-users-by-test' import { SearchType } from '../features/search/type/SearchType' import SearchDialog from '../SearchDialog' const parseEq = (value: string): { eq: string } | undefined => { if (value?.length > 0) { return {eq: value} } return undefined } const parseLike = (value: string): { like: string } | undefined => { if (value?.length > 0) { return {like: `%${ value }%`} } return undefined } const getUsersOptions = (filter: Inputs | undefined): QueryHookOptions => { if (filter && selectedGetUsersTest( filter )) { return { variables: { filter: { phone_number: parseEq( filter.phoneNumber ), address: parseLike( filter.address ) } }, skip: false, } } return { variables: undefined, skip: true, } } const selectedGetUsersTest = (filter: Inputs): boolean | undefined => { return filter.searchType === SearchType.Test } export const SearchPage = () => { const [dialogOpen, setDialogOpen] = useState<boolean>( true ) const [filter, setFilter] = useState<Inputs | undefined>( undefined ) const getUsersTest = useGetUsersByTest( getUsersOptions( filter ) ) const onSearchDialogSubmit = (values: Inputs): void => { setDialogOpen( false ) setFilter( values ) } const onSearchDialogClose = () => { setDialogOpen( false ) } const getData = (): any => { if (filter) { if (selectedGetUsersTest( filter )) { return getUsersTest.data?.select_eov_users_by_test ?? [] } } return [] } return ( <Box> { dialogOpen && <SearchDialog data={ filter } handleSubmitData={ onSearchDialogSubmit } handleClose={ onSearchDialogClose }/> } <UserData data={ getData() } /> </Box> ) }
guest

回答1

0

ベストアンサー

JavaScriptでは[]true扱いなので、[]を引数として渡してしまえばdata = testDataのデフォルト値が使われることはありません。

投稿2023/08/02 06:38

maisumakun

総合スコア145186

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

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

maisumakun

2023/08/02 06:39

(dataのデータ型が不明確な問題はさておくとしても)渡された値が空配列なら、というようなコードで分岐して処理を行う必要があります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問