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

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

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

Material-UIは、Material Designを利用可能なオープンソースのReact向けUIコンポーネントキットです。

React.js

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

Q&A

0回答

887閲覧

[React]クリックイベントでのeventの扱いがわからない。

aiai8976

総合スコア112

Material-UI

Material-UIは、Material Designを利用可能なオープンソースのReact向けUIコンポーネントキットです。

React.js

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

0グッド

0クリップ

投稿2020/03/01 14:11

編集2020/03/02 01:26

前提・実現したいこと

React.jsのクリックイベントにおいて、クリックしたchipのラベルの名前をstateで管理したいのですが、どのように記述すればいいのかわかりません。
chipはmaterial-uiで提供されているコンポーネントの一つです。以下参照。
https://material-ui.com/components/chips/
ちなみにevent.target.labelとした場合ではnot definedとなりました。
わかる方がいましたら、コメントお願いします。

該当のソースコード

export default function Sample() { const handleClick = (event) => { console.info('You clicked the Chip.'); console.log(event)//該当箇所 //setPerson(event.target.label) }; const [person, setPerson] = useState("山田花子"); return ( <div> <div className={classes.card}> <Card className={classes.root}> <CardActions> <FormDialog /> </CardActions> <CardContent className={classes.cardContent}> <Chip icon={<PersonIcon />} label="山田花子" onClick={handleClick('山田花子')} onDelete={handleDelete} className={classes.chip} /> ・・・

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

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

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

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

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

hoshi-takanori

2020/03/01 20:22 編集

Chipというコンポーネントの実装次第なので、ご自分で作ったならそのソースを、ライブラリを利用してるならその情報を教えてください。また、「event.target.labelとした場合ではnot defined」とのことですが、event.target が not defined ですか? それとも event.target.label でしょうか?
hoshi-takanori

2020/03/01 23:32

Chip に渡す label を Sample 側で指定したものから変更されないのであれば、handleClick にも Sample 側であらかじめ渡しておくことにして、 const handleClick = (label) => () => { /* event.target.label ではなく label を使う */ }; <Chip ... onClick={handleClick('山田花子')} ... /> とする方法もありますね。
aiai8976

2020/03/02 00:44

追加しましたので確認お願いします。 chipは複数個あって名前を一々渡すのが面倒なのでそれを識別できるlabel的な変数を渡したいのですが、それはできないのでしょうか。
aiai8976

2020/03/02 00:45

渡すというよりはeventオブジェクトでどのchipをクリックしたか認識するという意味です。
hoshi-takanori

2020/03/02 00:58

単に Chip が複数並んでるだけなら、名前の配列 const personNames = ['山田花子', '山田太郎', '山田次郎']; に対して、{ personNames.map(name => <Chip label={name} onClick={handleClick(name)} ... >) } とする方法もあります。
aiai8976

2020/03/02 01:27

追記した様に試しに山田花子だけhandleClickに渡したろころクリックできない様になりました。
hoshi-takanori

2020/03/02 01:32

上に書いたように handleClick の宣言を const handleClick = (label) => () => { としてください。(関数を返す関数になってます。)
aiai8976

2020/03/02 01:51

いけました!ありがとうございます。 const handleClick = (label) => { と const handleClick = (label) => () => { の違いが勉強不足でイマイチわかっていませんでした。どの様に調べれば解説がヒットするでしょうか。
hoshi-takanori

2020/03/02 02:02

記号の検索は難しいですよね。とりあえずキーワードとしては「関数を返す関数」「高階関数」「カリー化」あたりでしょうか。
aiai8976

2020/03/02 02:08

了解しました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問