Я попытался отобразить массив в реагировать и попытался сгенерировать кнопку, которая будет выполнять определенное действие, которое ссылается на другой object
, сгенерированный тем же массивом, с использованием map()
function.I ' Я использую Material-UI для ускорения процесса разработки.
Я новичок в реагировании (на самом деле это мой первый проект с реагированием), так что, возможно, это просто вопрос реализации 'состояния' в реакции, но я немного сбиваю с толку использование this
и bind
синтаксис правильно.
П.С. -Так что извините за мою глупость:>
Перейдите по этой ссылке , чтобы воспроизвести код
и вот код, с которым у меня возникли проблемы:
const products = [
{
id: 1,
img: "https://image.flaticon.com/icons/png/512/676/676434.png",
title: "Pineaple",
price: "Rp. 14.000",
desc: "Pineaple is one of nutritious food"
},
{
id: 2,
img: "https://image.flaticon.com/icons/png/512/676/676433.png",
title: "Banana",
price: "Rp. 14.000",
desc: "Banana is one of nutritious food"
},
{
id: 3,
img: "https://image.flaticon.com/icons/png/512/676/676441.png",
title: "Dragonfruit",
price: "Rp. 14.000",
desc: "Dragonfruit is one of nutritious food"
},
];
export default function Posts(props) {
const [open, setOpen] = React.useState(false);
function handleClickOpen() {
setOpen(true);
}
function handleClose() {
setOpen(false);
}
return (
<div>
<Grid container spacing={1} justify="center">
{products.map(product => (
<Grid item xs={6} sm={3} md={2} key={product.id}>
<Card>
<CardActionArea>
<CardMedia
component="img"
width="auto"
height="auto"
image={product.img}
/>
<CardContent>
<Typography component="h2"> {product.title} </Typography>
<Typography variant="body2" color="primary" component="p">
{" "}{product.price}{" "}
</Typography>
</CardContent>
</CardActionArea>
<CardActions>
<Button onClick={handleClickOpen}>
Buy
</Button>
</CardActions>
</Card>
</Grid>
))}
</Grid>
{products.map(product => (
<Dialog
key={product.id}
fullScreen
open={open}
onClose={handleClose}
>
<AppBar position="sticky">
<Toolbar>
<IconButton onClick={handleClose}>
<CloseIcon />
</IconButton>
<Typography> {product.title} </Typography>
<Button onClick={handleClose}> buy </Button>
</Toolbar>
</AppBar>
<List className={classes.dialogue}>
<img src={product.img} alt={product.title} />
<ListItem button>
<ListItemText primary={product.title} secondary={product.desc}/>
</ListItem>
</List>
</Dialog>
))}
</div>
);
}
Я хочу сделать onclick
кнопку, сгенерированную сопоставленным массивом для ссылки на конкретное действие (показать определенный диалог в списке массивов). Я также хочу реализовать тот же метод для onSubmit
на кнопке «купить» в диалоге.
Скриншот: https://imgur.com/a/M4v5LOu
(Я нажимаю «купить» на «pineaple», но реагирую на рендеринг всего списка и показываю последний объект в списке «dragonfruit».)
Полагаю, я буду использовать redux
, но, возможно, не сейчас.
Во всяком случае, все, я очень ценю любой ответ и помогает :)
Спасибо!