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

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

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

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

Q&A

解決済

2回答

1359閲覧

[React]ボタンコンポーネントのpropsに関数の返り値を渡したい

aiai8976

総合スコア112

React.js

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

0グッド

0クリップ

投稿2020/09/17 04:22

前提・実現したいこと

ボタンコンポーネントのpropsに関数の返り値を渡すようにしたいのですが、うまく行きません。
関数を使わない場合にはうまく行けるのですが、関数を使う場合にはどのように書く必要があるのでしょうか。
わかる方がいましたらコメントお願いします。

該当のソースコード

js

1function selectBG(value) { 2 return selectedButton[value] ? "#3d4546" : "#dde3e3"; 3 } 4 5//コンポーネントのprops 6<Button 7 bg={() => selectBG(value)} //失敗 8 // bg={selectedButton[value] ? "#3d4546" : "#dde3e3"} //成功

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

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

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

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

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

guest

回答2

0

関数を使わない場合にはうまく行けるのですが、関数を使う場合にはどのように書く必要があるのでしょうか。

以下の部分、通り定義をしているだけで実行していないので実行しましょう。

//コンポーネントのprops <Button bg={() => selectBG(value)} //失敗 // bg={selectedButton[value] ? "#3d4546" : "#dde3e3"} //成功

つまり

j

1() => selectBG(value) 2の個所を 3(() => selectBG(value))() 4にする

書き直すと

<Button bg={ (() => selectBG(value) )() } />

投稿2020/09/17 05:15

hentaiman

総合スコア6426

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

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

0

ベストアンサー

成功例から察するに、bgは文字列型なのですよね?
それなら

javascript

1const bg = selectBG(value); 2 3// ...略 4 5<Button bg={bg} />

もしくは

javascript

1<Button bg={selectBG(value)} />

でいいのではないでしょうか?

投稿2020/09/17 04:37

nekoniki

総合スコア2411

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

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

aiai8976

2020/09/17 04:46

functionだと返り値は何型になるのでしょうか?
nekoniki

2020/09/17 04:57

返り値というより、質問文中の書き方だとbgに関数型を渡してしまっています。
aiai8976

2020/09/17 05:00

functionだとreturnで文字列が返ってこないのですか?
nekoniki

2020/09/17 05:22

実行すれば文字列が返ってきますが、質問文中では実行せずに関数そのものを渡しています。 "() => selectBG(value)" は「実行したら"selectBG(value)"の結果を返してくれる無名関数そのもの」であって、その実行結果を渡しているわけではありません。 もし、そのようにして書きたい場合は無名関数を実行する必要があります。 "() => selectBG(value)"ではなく "(() => selectBG(value))()"を渡せば期待した結果になると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問