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

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

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

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

React.js

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

Q&A

解決済

1回答

3911閲覧

Reactで選択された項目によって表示内容を出し分けしたい

agumon

総合スコア271

JavaScript

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

React.js

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

0グッド

0クリップ

投稿2018/03/19 07:08

編集2018/03/19 07:12

Reactでセレクトボックスの選択された値によって配列を出し分けしたいです。

やりたいこと

1.セレクトボックスの任意のものを選択
2.選択したらボタンを押下
3.セレクトボックスで選択した値に対応した配列をループして画面に表示する

配列はarray1array2の2種類あります。
セレクトボックスのvalue値にもarray1array2があり、
選択された方がthis.state.arrayNamesetStateされ、
ボタンを押下したらvalueと同じ名前の配列をmapでループして表示させたいです。

現状

  • セレクトされたvaluearrayNameにセットするとこまではできています。

(選択されたvalueの値がconsoleに表示されます)

  • {array1.map((hoge) =>

表示されっぱなしですがarray1の内容が表示されます。
array2にすれば内容が変わります。
array1 ← ここが切り替えられればよいのですが、、、
{this.state.arrayName.map((hoge) =>ではだめでした爆)

ソース

import React, { Component } from 'react' import ReactDOM from 'react-dom' const array1 = [ { name: 'aaa' }, { name: 'bbb' } ] const array2 = [ { name: 'ccc' }, { name: 'ddd' } ] class App extends Component { constructor(props) { super(props) this.state = { arrayName: "array1" } } onChangeSelectBox(event) { this.setState({ arrayName: event.target.value }) } onClickButton() { console.log(this.state.arrayName) } render() { return( <div> <select onChange={(event) => this.onChangeSelectBox(event)}> <option value="array1">array1</option> <option value="array2">array2</option> </select> <button onClick={() => this.onClickButton()}>セレクト</button> <div> {array1.map((hoge) => <Loop hoge={hoge} key={hoge.name} /> )} </div> </div> ) } } const Loop = (props) => { return( <p>{props.hoge.name}</p> ) } ReactDOM.render( <App />, document.getElementById('root') )

他によい書き方などがあれば教えていただけると幸いです。
どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下はReactベースのコードではないですが、そこまで書けているのであれば、あとは以下のコードでイメージは掴めるかと思います。

const products = { books: [ { name: 'a' }, { name: 'b' }, { name: 'c' } ], games: [ { name: 'x' }, { name: 'y' }, { name: 'z' } ] } const selectedCategory = 'books'; products[selectedCategory].forEach(item => console.log(item)); > { name: 'a' } > { name: 'b' } > { name: 'c' }

{this.state.arrayName.map((hoge) =>ではだめでした爆)

this.state.arrayNameに入っているのは文字列であるため、map関数は使えません。

投稿2018/03/19 07:33

編集2018/03/19 07:44
HayatoKamono

総合スコア2415

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

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

agumon

2018/03/19 10:21

> HayatoKamono さん ご回答ありがとうございます! いただいたソースを参考にいたしまして解決いたしました。 ``` import React, { Component } from 'react' import ReactDOM from 'react-dom' const obj = { array1 : [ { name: 'aaa' }, { name: 'bbb' } ], array2 : [ { name: 'ccc' }, { name: 'ddd' } ] } class App extends Component { constructor(props) { super(props) this.state = { arrayName: "array1" } } onChangeSelectBox(event) { this.setState({ arrayName: event.target.value }) } onClickButton() { const arrayName = this.state.arrayName const area = document.querySelector('.area') obj[arrayName].forEach(item => { area.insertAdjacentHTML('beforeend', `<p>${item.name}</p>` ) }) } render() { return( <div> <select onChange={(event) => this.onChangeSelectBox(event)}> <option value="array1">array1</option> <option value="array2">array2</option> </select> <button onClick={() => this.onClickButton()}>セレクト</button> <div className="area"></div> </div> ) } } ReactDOM.render( <App />, document.getElementById('root') ) ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問