フロントエンドは初心者です。
今までバックエンドは触っていましたが、今度はフロントエンド(React JSX)を触ることになり、
余り時間的猶予もないため、アドバイスいただければ幸いです。
プルダウンで選択した内容を別のプルダウンに連動させたい
- 多次元JSONを取得し、stateに値を補完
- プルダウンAに、1階層目を表示
- プルダウンAの値を選択したら、プルダウンBに2階層目の値を展開
該当のソースコード
JSONデータ例
const result = { "result" : true, "message": "", "code": 200, "total_cnt" : 1, "all_count": 2, "data" :{ "prefecture_list" : [ { "prefecture_id" : "1", "prefecture_name" : "北海道" "city_list" [ { "city_id" : "1", "city_name" : "札幌" }, { "city_id" : "2", "city_name" : "函館" } ] }, { "prefecture_id" : "2", "prefecture_name" : "青森" "city_list" [ { "city_id" : "1", "city_name" : "青森" }, { "city_id" : "2", "city_name" : "三沢" } ] } ] } }
constructor(props) { super(props); this.state = { prefecture_list: [], prefeture_selected: 0, city_list: [], city_selected: 0 } } getPrefectureList = async () => { this.setState({prefectures: result.data.prefecture}); const prefectures = this.state.prefecture.map((line) => { return { prefecuture_id: line.prefecuter_id, prefecuture_name: line.prefecture_name } }); this.setState({result.data.prefecture_list: prefectures}) } handleChangePrefecture = (value) => { this.setState({prefecture_selected: value}); const selectedPrefecture = this.state.prefecuture_list.filter(line=> { if (line.prefecture_id === this.state.prefecture_selected + 1) { return line; } }); // ** 市町村データ取得 const citys = selectedPrefecture.map((line) => { return line.city_list; } this.setState({city_list: citys[0]); } this.setState({prefecture_list: result.data,prifecture_list})
プルダウンAに都道府県名を展開
render () { const handleChange = (e) => { this.setState({[e.target.name]: e.target.value}) } <Select> name="prifecture_selected" id="prefecture_selected" value={this.state.prefecture_selected} onChange={(e) => this.handleChangePrefecture(e.target.value)} <MenuItem value={""}> </MenuItem> {this.state.prefecture_list.map(line => { return ( <MenuItem value={line.prefecture_id} key={line.prefecture_id} > {line.prefecture_name} </MenueItem> ) })} </Select> <Select> <Select> name="city_selected" id="city_selected" value={this.state.city_selected} onChange={(e) => this.setState({ [e.target.name]: e.target.value }) }) <MenuItem value={""}> </MenuItem> {this.state.city_list.map(line => { return ( <MenuItem value={line.city_id} key={line.city_id} > {line.city_name} </MenueItem> ) })} </Select> </Select> }
補足情報
そもそももっと勉強してから質問をと言う意見もあるかと思いますが、
効率よくプルダウンBへの連動はどう書けばいいのかアドバイスいただければ幸いです。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/10/15 07:30
2022/10/16 07:00
退会済みユーザー
2022/10/16 10:58