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

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

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

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

React.js

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

Q&A

解決済

1回答

368閲覧

react 子コンポーネントに引数を渡す

cheche0830

総合スコア187

JavaScript

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

React.js

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

0グッド

0クリップ

投稿2018/02/01 03:43

編集2018/02/01 03:58

親コンポーネント:<Card list="a,b,c" />

子側:

import React from 'react'; import theme from './Card.css'; function eachLi(props) { console.log(props); return props.join(","); } const Card = (props) => ( <p> {eachLi(props.list)} </p> ); export default Card;

このような感じで出力したいのですが、
console.logには確かにデータはきているのですが、
joinのところではおそらくデータが入っていないようで
エラーになります。。
何か出力のタイミングの問題だとおもうのですが、
どう書いたらよいでしょうか?

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

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

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

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

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

masaya_ohashi

2018/02/01 03:51

あなたのこのコードは、<p>の中に「どんな表示がされること」を想定したコードですか?
masaya_ohashi

2018/02/01 03:54

それは渡されたprops.listが["a","b","c"]という形だった場合<p>abc</p>にしたい、ということであっていますか?
cheche0830

2018/02/01 03:56

あ、すいません、<p>abc</p>にする場合は.splitではなく.joinでした・・joinが正しいです。
guest

回答1

0

ベストアンサー

JavaScript

1import React from 'react'; 2import theme from './Card.css'; 3 4function eachLi(props) { 5 console.log(props); 6 return props.join(","); 7} 8 9const Card = (props) => ( 10 <p> 11 {eachLi(props.list)} 12 </p> 13); 14 15export default Card;

このコードで親からCardに渡す引数が<Card list="a,b,c" />であればjoinは間違いです。渡されたlistは文字列であり、 joinメソッドを持ちません。文字列を分解するsplitで配列に分解して返せば{eachLi(props.list)}部分はabcという文字列になります。

<Card list={[a,b,c]} />であれば、渡されたlistは配列であり、joinが正しいです。ただし、joinで得られる結果の文字列はa,b,cであり、間にjoinに渡した引数の,が挟まれます。なにもはさみたくないならjoin("")~~またはjoin()~~としてください。
(嘘つきました。引数無しのjoin()だとデフォルトで,が挟まります)

追記

Cardにlistが渡されないパターンが存在する場合、Cardの中でlistを「存在する前提」で使ってはいけません。必ずnullundefinedになっていないかチェックする必要があります。

JavaScript

1function eachLi(props) { 2 console.log(props); 3 if(Array.isArray(props)) { // propsが配列である 4 return props.join(","); 5 } 6 else { // propsが配列ではない(nullやundefinedだった場合) 7 return ""; 8 } 9}

投稿2018/02/01 04:00

編集2018/02/01 04:26
masaya_ohashi

総合スコア9206

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

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

cheche0830

2018/02/01 04:08

ありがとうございます。無事配列で取得することができたのですが、(console.logの部分で確認)やはりjoinのところでつまづくようで、 TypeError: Cannot read property 'join' of undefined とでます。.join(",") .join()とも試しましたが同じでした・・・
masaya_ohashi

2018/02/01 04:13

親から渡されるlistは必ず中身が存在していますか?変数などでnullになるタイミングはありませんか?
masaya_ohashi

2018/02/01 04:14

また、このコードは「本当に全て」ですか?見せられないと削っていたり、console.logとreturnの間に何か処理をしていませんか?
masaya_ohashi

2018/02/01 04:14

もしくは、<Card/>のように、listを渡さないで使う場面がありませんか?
cheche0830

2018/02/01 04:17

あ、このカードはたくさんあり引数がないものもあります!
cheche0830

2018/02/01 04:23

ああ、そこは盲点でした。。。 ありがとうございます!試してみます!
cheche0830

2018/02/01 15:02

ばっちりできました!!!!ありがとうございました!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問