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

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

ただいまの
回答率

90.51%

  • JavaScript

    20399questions

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

javascript で値を渡したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 113

oratyadotto

score 4

onClick した際にクリックしたitemを引数に関数likeFluitsを発行したいのですが、fluitsListの中の値全てが引数となってしまいます。

例えばfluitsList = ['peach', 'apple']として、'peach'をクリックした場合
likeFluitsをLIKE_FLUITSアクションにdispatchさせ、payloadを'peach'としたいです。

reduxとの通信部分でlikeFluitsのリスト取得までは正常に動作しています。
親要素から子要素へのpropsをリスト単位で渡しているが原因でしょうか。
e.target等を試しましたが変化なしでした。
どなたかご教示ください。

const ExampleFluits = (props) =>(
            {props.fluitsList.map((item, idx)=>( 
                <sample key={item} onClick={(e)=>{{ console.log(`${e.target.innerText}was cliked`)
                props.likeFluits(props.item)}}>  ##ここでは選択したものがe.target.innerTextとして正常に出力できている
                    {itemKey}
                </sample>
            ))}


class Fluits extends React.Component {
 render(){
    <ExampleFluits 
     likeFluits={(e) => this.props.likeFluits(this.props.fluitsList)}
     />

const mapDispatchToProps = (dispatch) => ({
    likeFluits: (queryStore) => dispatch(LIKE_FLUITS(queryStore)),

})

export default connect(null, mapDispatchToProps)(Fluits);
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • jun68ykt

    2019/05/19 17:41

    どういたしまして。自己解決されたとのことで、よかったです 👏

    キャンセル

  • oratyadotto

    2019/05/19 18:29

    はい、ご返答ありがとうございます。しかし付随で不明点が出てきた為、よろしければければこちらもお答えいただけないでしょうか。
    https://teratail.com/questions/190154

    キャンセル

  • jun68ykt

    2019/05/19 20:45

    そちらのご質問にも回答しましたので、ご一読ください。

    キャンセル

回答 1

checkベストアンサー

0

こんにちは。

以下、役に立つ回答になっているか、やや心もとないのですが、ご質問にあるコードに対していくつか修正し、さらに、いくつかのファイルを補って、動くReactアプリにしたものを GitHub の以下のレポジトリ

に上げました。ベースになるアプリを create-react-app で作成していますので、もし Gitをお使いであれば、ターミナルから、以下の手順で動作確認できます。

  • git clone git@github.com:jun68ykt/q189122.git
     
  • cd q189122
     
  • yarn install
     
  • yarn start
     

上記によって、以下のように表示されます。(ブラウザのデベロッパーツールを開いておきます)

イメージ説明

上記の状態から、 peach と表示されている灰色の部分をクリックすると、redux-logger によって以下のようにconsoleに表示されます。

イメージ説明

console に prev state ▶ 、 action ▶、 next state ▶ と表示されている右向きの三角をクリックすると、それぞれの内容が展開されます。

イメージ説明

上記のconsole では、 LIKE_FRUITSアクションが発行されたことにより、state がどのように変わったかが分かります。

作成したサンプルでは、 state は fruits というプロパティを持ち、これの値は配列です。 state.fruits は初期状態では空の配列で、各フルーツ名が表示されている灰色の部分をクリックすると、該当のフルーツ名(だけ)が、state.fruits に追加されていくことが、 console に出されたログを追っていけば分かると思います。

また、ソースコードの修正については、コミットを古い順に追っていけば、どのような修正をしたかが分かると思います。

上記のコードは、ご質問に挙げられている Fluitsをとりあえず動作確認できるようにしただけなので、このご質問の元になっている、oratyadottoさんが実際に手がけているアプリでは、他にも多くのコンポーネントやRedux要素がからんでいると思われますので、それらの修正に直接、役に立つ回答になっているかというと、あまり自信はないのですが、何らかの参考にして頂ければ幸いです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • JavaScript

    20399questions

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