セレクトボックスに選択した値を表示させたい。
現在、セレクトボックスを配列をmap関数でセレクトメニューを生成するように作成しております。
配列は連想配列になっており、選択した連想配列の情報を抜き出すような仕組みを作っているのですが、
セレクトボックスから生成されたセレクトメニューを選択しても選択した表記名が表示されません。
選択した連想配列の値は取り出せております。
どなたかセレクトボックス内に選択した表示名を表示する事と、選択した連想配列の情報を抜き出す方法をご教授いただけませんでしょうか?
何卒よろしくお願いいたします。
該当のソースコード
react
1import * as React from "react"; 2import Box from "@mui/material/Box"; 3import InputLabel from "@mui/material/InputLabel"; 4import MenuItem from "@mui/material/MenuItem"; 5import FormControl from "@mui/material/FormControl"; 6import Select from "@mui/material/Select"; 7 8export default function BasicSelect() { 9 const [users, setUsers] = React.useState([ 10 { name: "AAA", age: "25", weight: "70", height: "180" }, 11 { name: "BBB", age: "77", weight: "66", height: "170" }, 12 { name: "CCC", age: "51", weight: "87", height: "173" }, 13 { name: "DDD", age: "39", weight: "54", height: "167" } 14 ]); 15 16 const [select, setSelect] = React.useState(""); 17 18 const [age, setAge] = React.useState(""); 19 const [weight, setWeight] = React.useState(""); 20 const [height, setHeight] = React.useState(""); 21 22 //セレクトボックスを選択・ボックス内に表示 23 const handleChangeSelect = (event) => { 24 setSelect(event.target.value); 25 }; 26 27 //選択したユーザーの情報をsetStateで入れる 28 const handleSelectChange = (index) => { 29 setAge(users[index].age); 30 setWeight(users[index].weight); 31 setHeight(users[index].height); 32 }; 33 34 //コンソールに表示 35 React.useEffect(() => { 36 console.log("age:" + age); 37 console.log("weight:" + weight); 38 console.log("height" + height); 39 },[}); 40 41 const [number, setNumber] = React.useState(""); 42 const handleChange = (event) => { 43 setNumber(event.target.value); 44 }; 45 46 return ( 47 <div> 48 <Box sx={{ minWidth: 120 }}> 49 <FormControl fullWidth> 50 <InputLabel id="demo-simple-select-label">User</InputLabel> 51 <Select 52 labelId="demo-simple-select-label" 53 id="demo-simple-select" 54 value={select} 55 label="人間" 56 onChange={handleChangeSelect} 57 > 58 {users.map((val, index) => { 59 const name = val.name; 60 return ( 61 <div key={index}> 62 <MenuItem 63 value={name} //この値はselectに入れたい 64 onClick={() => { 65 handleSelectChange(index); 66 }} 67 > 68 {name} 69 </MenuItem> 70 </div> 71 ); 72 })} 73 </Select> 74 </FormControl> 75 </Box> 76 77 <p>↓元のサンプル</p> 78 79 <Box sx={{ minWidth: 120 }}> 80 <FormControl fullWidth> 81 <InputLabel id="demo-simple-select-label">number</InputLabel> 82 <Select 83 labelId="demo-simple-select-label" 84 id="demo-simple-select" 85 value={number} 86 label="number" 87 onChange={handleChange} 88 > 89 <MenuItem value={10}>Ten</MenuItem> 90 <MenuItem value={20}>Twenty</MenuItem> 91 <MenuItem value={30}>Thirty</MenuItem> 92 </Select> 93 </FormControl> 94 </Box> 95 </div> 96 ); 97}
下記にcodesandboxのURLを表記いたします。
https://codesandbox.io/s/basicselect-material-demo-forked-p33z2?file=/demo.js:0-2823
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/20 00:05