はじめて質問させていただきます。
Reactを使ってアプリを作っています。
peopleという配列の中身を、material-uiのTableを用いて表示するというものです。
作っているうちにわからないことがありました。
まずはソースを見てください。
(2つ以上returnがあったらシンタックスハイライトが効かない?っぽかったので見づらいですが2つにわけました。上下合わせて1つのソースです。間違ったことをしていたらごめんなさい。)
js
1import React from 'react'; 2import Table from '@material-ui/core/Table'; 3import TableBody from '@material-ui/core/TableBody'; 4import TableCell from '@material-ui/core/TableCell'; 5import TableRow from '@material-ui/core/TableRow'; 6import ListIcon from '@material-ui/icons/List'; 7import IconButton from '@material-ui/core/IconButton'; 8import List from '@material-ui/core/List'; 9import ListItem from '@material-ui/core/ListItem'; 10import ListItemText from '@material-ui/core/ListItemText'; 11import Dialog from '@material-ui/core/Dialog'; 12import DialogTitle from '@material-ui/core/DialogTitle'; 13import DialogContent from '@material-ui/core/DialogContent'; 14 15 16const people = [ 17 { id: '1', name: 'taro', item: ['りんご', 'みかん'] }, 18 { id: '2', name: 'hanako', item: ['もも', 'なし'] }, 19 { id: '3', name: 'takashi', item: ['ぶどう', 'メロン'] }, 20]; 21 22function SimpleDialog(props) { 23 const { onClose, open, itemList } = props; 24 25 const handleClose = () => { 26 onClose(); 27 }; 28 29 30 return ( 31 <Dialog onClose={handleClose} aria-labelledby="person-item" open={open}> 32 <DialogTitle id="person-item">もちもの</DialogTitle> 33 <DialogContent> 34 <List> 35 {itemList.map(item => ( 36 <ListItem key={item}> 37 <ListItemText primary={item} /> 38 </ListItem> 39 ))} 40 </List> 41 </DialogContent> 42 </Dialog> 43 ); 44}
js
1export default function List(props) { 2 const [open, setOpen] = React.useState(false); 3 4 const handleClickOpen = () => { 5 setOpen(true); 6 }; 7 8 const handleClose = value => { 9 setOpen(false); 10 }; 11 12 const makeTable = people => { 13 if (people) { 14 return people.map(person => { 15 return ( 16 <TableRow hover key={person.id} tabIndex={-1}> 17 <TableCell align="center">{person.id}</TableCell> 18 <TableCell align="center">{person.name}</TableCell> 19 <TableCell> 20 <IconButton 21 onClick={handleClickOpen} 22 > 23 <ListIcon /> 24 </IconButton> 25 <SimpleDialog open={open} onClose={handleClose} itemList={person.item} /> 26 </TableCell> 27 </TableRow> 28 ); 29 }); 30 } 31 }; 32 33 return ( 34 <Table> 35 <TableBody>{makeTable(people)}</TableBody> 36 </Table> 37 );
発生している問題・実現したいこと
Tableの中に、ListIconをクリックしたら、各人のもちもの一覧を開くSimpleDialogをいれているのですが、
今現在のこのコードだと、3つあるListIconどれをクリックしてもtakashiのもちもの一覧しか表示されません。
各ボタンを押したときにきちんと各人のもちもの一覧が表示されるようにしたいです。
試したこと
自分の考えだと、dialogを表示する際にmapで回されて、配列の最後のオブジェクトであるtakashiのものが表示さ
れてしまっていると思ったのですが、dialogを表示したときにmapをとめる?方法がわかりませんでした。
どうかご回答の程よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/01 07:29
2019/12/01 09:43