繁体   English   中英

如何在 Material-UI 中展平状态数组?

[英]How to flatten state array in Material-UI?

我使用 Material-UI 作为电子商务应用程序的前端。

我有一个空的购物车状态数组,它将采用稍后将被解析的“字符串化对象”。 select 组件上的每个 handleChange() 都应该将一个对象(字符串化对象)添加到购物车数组中。

handleChange() 将对象嵌套在自身内部,即 [ob1,[obj2, [obj3, [etc[etc]]]]] - 但我需要 [obj1, obj2, obj3, etc] 代替...

代码 -

import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import Card from '@material-ui/core/Card';
import CardActionArea from '@material-ui/core/CardActionArea';
import CardActions from '@material-ui/core/CardActions';
import CardContent from '@material-ui/core/CardContent';
import CardMedia from '@material-ui/core/CardMedia';
import Button from '@material-ui/core/Button';
import Typography from '@material-ui/core/Typography';
import IconButton from '@material-ui/core/IconButton';
import Icon from '@material-ui/core/Icon';
import InputLabel from '@material-ui/core/InputLabel';
import MenuItem from '@material-ui/core/MenuItem';
import FormHelperText from '@material-ui/core/FormHelperText';
import FormControl from '@material-ui/core/FormControl';
import Select from '@material-ui/core/Select';
import soda from "./soda.jpg";
import * as firebase from 'firebase';



const useStyles = makeStyles(theme=>({
  card: {
    maxWidth: 345,
    marginTop: 170,
    marginLeft: 70,
  },
  media: {
    height: 0,
  },
  formControl: {
    margin: theme.spacing(1),
    minWidth: 120,
  },
  selectEmpty: {
    marginTop: theme.spacing(2),
  },
}));

export default function MediaCard() {

  const classes = useStyles();
  const [age, setAge] = React.useState('');
  let [cart, setCart]= React.useState([]);
  const inputLabel = React.useRef(null);
  const [labelWidth, setLabelWidth] = React.useState(0);
    React.useEffect(() => {

      }, []);


 const handleChange = event =>{
           Array.prototype.flat(cart)
           setCart([cart].concat(event.target.value));
           console.log(cart);
         };



 let item = {
     itemDescription:"CBD FLOWER",
     itemName: "CBD",
     increments: {
         gram: {
             price: 10,
             weight: 1,
             name: "CBD",
         },
         eighth: {
             price: 30,
             weight: 3.5,
             name: "CBD",
         },
         quarter: {
             price: 70,
             weight: 7,
             name: "CBD",
         },
         half: {
             price: 140,
             weight: 14,
             name: "CBD",
         },
         ounce: {
             price: 300,
             weight: 28,
             name: "CBD",
         },

     }

 };



  let stringified = JSON.stringify(item.increments.gram);







  /*let getDiv = document.getElementById('testo');
      let getInput = getDiv.getElementsByTagName('input');
      for (let i = 0, n = getInput.length; i < n; i = i+1){
          console.log(getInput[i].value);
   }*/




  return (



    <Card className={classes.card}>
      <CardActionArea>
        <CardMedia
          component="img"
          alt={item.itemName}
          height="500"
          image={soda}
          src={soda}
          title="CBD SODA"
        />
        <CardContent>
          <Typography gutterBottom variant="h5" component="h2">
            {item.itemName}
          </Typography>
          <Typography variant="body2" color="textSecondary" component="p">
            A refreshing drink filled w/ 28.8% CBD
          </Typography>
        </CardContent>
      </CardActionArea>
      <CardActions>
      <div id="testo">
        <FormControl className={classes.formControl}>
        <InputLabel id="demo">Choose</InputLabel>
        <Select
          labelId="demo"
          id="selectedItem"
          value={age}
          onChange={handleChange}
          displayEmpty
          className={classes.selectEmpty}
        >
          <MenuItem value={JSON.stringify(item.increments.gram)}>10</MenuItem>
          <MenuItem value={JSON.stringify(item.increments.eighth)}>30</MenuItem>
          <MenuItem value={JSON.stringify(item.increments.quarter)}>90</MenuItem>
          <MenuItem value={JSON.stringify(item.increments.half)}>140</MenuItem>
          <MenuItem value={JSON.stringify(item.increments.ounce)}>300</MenuItem>
        </Select>
        <FormHelperText>Quantity + Price</FormHelperText>
      </FormControl>
      <div id="seperator">
      <Button variant="outlined" color="primary">
          Add To Cart
      </Button>
      </div>
      </div>

      </CardActions>


    </Card>


    );

}

之后我试图展平阵列,但什么也没有。 我也试过 Array.prototype.push(),请帮忙,哈哈

你需要的是Array.prototype.flat()吗? 第一个参数是展平的深度。

 var arr = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]]; var flatarr = arr.flat(Infinity); console.log(flatarr);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM