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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

TypeScript

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

React.js

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

Q&A

解決済

1回答

1116閲覧

Unhandled Rejection (TypeError)

aaa11

総合スコア14

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

TypeScript

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

React.js

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

0グッド

0クリップ

投稿2021/07/15 01:45

React初心者です。

Unhandled Rejection (TypeError): tests.map is not a functionが出て改善方法が分からず先に進めません。
Rails(API) + Reactを使ってコードを書いています。
一覧ページから遷移して遷移先のURLからIDを取得してRails側でデータを取ってきています。
イメージ説明
material-uiなどのインポートなどはコードが長くなるので省略しています。

ここの記載が原因でしょうか?
ShowTest :React.FC<UserProps> = (props) => {

改善方法があればアドバイスお願いします。

React

1type UserProps = RouteComponentProps<{ 2 id: string 3 }> 4 5interface getParams { 6 id: number 7 user_id: number 8 title: string 9 image: string 10 body: string 11} 12 13const ShowTest :React.FC<UserProps> = (props) => { 14 15 //URLからid取得 16 const initialId :number = Number(props.match.params.id) 17 const [id,setId] = useState(initialId) 18 19 const initialTests: getParams[] = [] 20 21 const [tests, setTests] = useState(initialTests) 22 23 const get = async (id:number) => { 24 const res = await getTest(id) 25 console.log(res) 26 setTests(res.data) 27 } 28 29 useEffect( () => { 30 get(id) 31 }, [setTests]) 32 33 return( 34 <> 35 { 36tests.map((test) => ( 37<Card className={classes.root} 38key={test.id} 39> 40 41<CardHeader 42avatar={ 43 <Avatar aria-label="recipe" className={classes.avatar}> 44 R 45 </Avatar> 46} 47title={test.title} 48/> 49{/* <CardMedia 50className={classes.media} 51image="/static/images/cards/paella.jpg" 52title="Paella dish" 53/> */} 54<CardContent> 55{test.body} 56</CardContent> 57</Card> 58)) 59} 60</> 61 ) 62}

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

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

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

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

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

maisumakun

2021/07/15 01:55

画像が「status: OK」のものになっています。それなら特に問題ないのではないでしょうか?
aaa11

2021/07/15 02:01

画像はreturnの中身をコメントアウトしてコンソールで表示した時の画像になりデータ自体は取れている事は確認できています。 returnの中身をコメントアウトを解除してページに遷移するとUnhandled Rejection (TypeError)で表示ができないようになっています。
guest

回答1

0

ベストアンサー

想定しているデータ構造が正しくないだけではないでしょうか?

const [tests, setTests] = useState(initialTests)で初期設定しているinitialTestsは配列であるのに対して、画像で提示されているres.dataは単なるオブジェクトであって、配列ではありません。

投稿2021/07/15 02:05

maisumakun

総合スコア145208

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

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

aaa11

2021/07/15 03:31

オブジェクトを配列に入れ直す必要があるという事ですか?
maisumakun

2021/07/15 03:37

tests.mapを行っている以上は、testsに入るものが配列であることを想定されています。 そのまま配列に入れればいいか、別な形になるかは考慮が必要です。
aaa11

2021/07/15 05:35

const [tests, setTests] = useState(initialTests)の記載をconst [tests, setTests] = useState<getParams>()変えてmapを削除したところ表記されました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問