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

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

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

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

React.js

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

Q&A

解決済

1回答

632閲覧

propsにfindで見つけたユーザの情報を渡したい

yamamotosyo

総合スコア7

JavaScript

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

React.js

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

0グッド

0クリップ

投稿2021/08/08 16:33

やりたいこと

Articleコンポーネントpropsuserに、findUserで見つかったuserの情報を渡したいです。

jsx

1export const Home = () => { 2 const [users, setUsers] = useState([]) 3 const [articles, setArticles] = useState([]) 4 5 useEffect(() => { 6 const fetchData = async () => { 7 const result = await fetchHome() 8 setArticles(result.articles) 9 setUsers(result.users) 10 } 11 fetchData() 12 }, []) 13 14 const findUser = (users, articleUserId) => { 15 return users.find( user => user.id === articleUserId ) 16 } 17 18 return ( 19 <ul> 20 { articles.map( article => ( 21 <Article 22 article={ article } 23 user={ findUser(users, article.user_id) } 24 /> 25 )) 26 } 27 </ul> 28 ) 29}

stateusersには

{ "id": 1, "name": "user_0", "email": "example0@example.com", "created_at": "2021-07-26T22:22:41.511Z", "updated_at": "2021-07-26T22:22:41.511Z" }, { "id": 2, "name": "user_1", "email": "example1@example.com", "created_at": "2021-07-26T22:22:41.539Z", "updated_at": "2021-07-26T22:22:41.539Z" }, { "id": 3, "name": "user_2", "email": "example2@example.com", "created_at": "2021-07-26T22:22:41.557Z", "updated_at": "2021-07-26T22:22:41.557Z" }

statearticlesには

{ "id": 1, "title": "title0", "user_id": 1, "created_at": "2021-07-26T22:22:41.516Z", "updated_at": "2021-07-26T22:22:41.516Z", "content": "aaaaaaaaaaaaaaaaaaaaaaaaa" }, { "id": 2, "title": "title1", "user_id": 2, "created_at": "2021-07-26T22:22:41.518Z", "updated_at": "2021-07-26T22:22:41.518Z", "content": "aaaaaaaaaaaaaaaaaaaaaaaaa" }, { "id": 3, "title": "title2", "user_id": 3, "created_at": "2021-07-26T22:22:41.526Z", "updated_at": "2021-07-26T22:22:41.526Z", "content": "aaaaaaaaaaaaaaaaaaaaaaaaa" }, { "id": 4, "title": "title3", "user_id": 1, "created_at": "2021-07-26T22:22:41.528Z", "updated_at": "2021-07-26T22:22:41.528Z", "content": "aaaaaaaaaaaaaaaaaaaaaaaaa" }, { "id": 5, "title": "title4", "user_id": 2, "created_at": "2021-07-26T22:22:41.530Z", "updated_at": "2021-07-26T22:22:41.530Z", "content": "aaaaaaaaaaaaaaaaaaaaaaaaa" }, { "id": 6, "title": "title5", "user_id": 3, "created_at": "2021-07-26T22:22:41.531Z", "updated_at": "2021-07-26T22:22:41.531Z", "content": "aaaaaaaaaaaaaaaaaaaaaaaaa" }, { "id": 7, "title": "title6", "user_id": 1, "created_at": "2021-07-26T22:22:41.533Z", "updated_at": "2021-07-26T22:22:41.533Z", "content": "aaaaaaaaaaaaaaaaaaaaaaaaa" }, { "id": 8, "title": "title7", "user_id": 2, "created_at": "2021-07-26T22:22:41.534Z", "updated_at": "2021-07-26T22:22:41.534Z", "content": "aaaaaaaaaaaaaaaaaaaaaaaaa" }, { "id": 9, "title": "title0", "user_id": 3, "created_at": "2021-07-26T22:22:41.542Z", "updated_at": "2021-07-26T22:22:41.542Z", "content": "aaaaaaaaaaaaaaaaaaaaaaaaa" }

というデータが入っています。

findUser関数ではarticles.mapで渡ってきたarticlearticle.user_idと、user.idが同じであれば、
そのuserを返却するということしています。

しかし、現状では
TypeError: Cannot read property 'name' of undefined
というエラーがでます。
これは、userを渡している子コンポーネントであるArticleuser.nameという風に使用しており、
現状ではuserundefinedになっているため、該当のエラーが出現していると考えています。

どのようにすれば、Atricleコンポーネントpropsuser

{ "id": 1, "name": "user_0", "email": "example0@example.com", "created_at": "2021-07-26T22:22:41.511Z", "updated_at": "2021-07-26T22:22:41.511Z" }

を渡せるでしょうか?

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Articleコンポーネント内でuserundefinedチェックを入れれば良いだけじゃないでしょうか?

Article.tsx

1const Article = ({ article, user }) => { 2 if (!user) return null; 3 4 return <p>{user.name}</p>; 5};

投稿2021/08/08 18:35

k4a

総合スコア983

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問