【问题标题】:How can I expand the card that was clicked and won't trigger the other cards to expand as well?如何展开被点击的卡片并且不会触发其他卡片展开?
【发布时间】:2021-08-09 07:14:54
【问题描述】:

我正在使用材质 ui,并且我有一张动态卡片。一旦我单击该图标展开该特定卡片,它也会触发其他卡片展开。如何只展开被点击的特定卡片,而不会触发其他卡片同时展开?

const useStyles = makeStyles((theme) => ({
  expand: {
    transform: "rotate(0deg)",
    marginLeft: "auto",
    transition: theme.transitions.create("transform", {
      duration: theme.transitions.duration.shortest,
    }),
  },
  expandOpen: {
    transform: "rotate(180deg)",
  },
}));

const orders = () => {
  const classes = useStyles();
  const [items, setItems] = useState([]);


  const [expanded, setExpanded] = useState(false);
  const handleExpandClick = () => {
    setExpanded(!expanded);
  };


  return (
    <div>
                <div>
                  {items.map((order) => (
                      <Grid key={order.id}>
                        <Card className={classes.card}>
                          <CardContent>
                            //some content here
                          </CardContent>
                          <CardActions disableSpacing>
                            <Tooltip title="Show More">
                              <IconButton
                                className={clsx(classes.expand, {
                                  [classes.expandOpen]: expanded,
                                })}
                                onClick={handleExpandClick}
                                aria-expanded={expanded}
                                aria-label="show more"
                                color="secondary"
                                style={{ margin: "0 auto" }}
                              >
                                <ExpandMoreIcon fontSize="large" />
                              </IconButton>
                            </Tooltip>
                          </CardActions>
                          <Collapse in={expanded} timeout="auto" unmountOnExit>
                            <CardContent>
                              // content inside the expanded card
                            </CardContent>
                          </Collapse>
                        </Card>
                      </Grid>
                    ))}
              )}
            </div>
          )}
        </div>
      
    </div>
  );
};

export default Cancelled;

【问题讨论】:

    标签: reactjs material-ui


    【解决方案1】:

    这是更新后的代码,应该可以按照您的意愿工作,但您可能需要根据需要进行修改,如果您觉得有帮助,请告诉我

    const useStyles = makeStyles((theme) => ({
          expand: {
            transform: "rotate(0deg)",
            marginLeft: "auto",
            transition: theme.transitions.create("transform", {
              duration: theme.transitions.duration.shortest,
            }),
          },
          expandOpen: {
            transform: "rotate(180deg)",
          },
        }));
        
        const orders = () => {
          const classes = useStyles();
          const [items, setItems] = useState([]);
        
        
          const [expanded, setExpanded] = useState(false);
          const [selectedId, setSelectedId] = useState(-1);
          const handleExpandClick = (orderId) => {
             if(selectedId === orderId){
               setSelectedId(-1);
             } else {
              setSelectedId(orderId);
             }
            
          };
        
        
          return (
            <div>
                        <div>
                          {items.map((order) => (
                              <Grid key={order.id}>
                                <Card className={classes.card}>
                                  <CardContent>
                                    //some content here
                                  </CardContent>
                                  <CardActions disableSpacing>
                                    <Tooltip title="Show More">
                                      <IconButton
                                        className={clsx(classes.expand, {
                                          [classes.expandOpen]: expanded,
                                        })}
                                        onClick={()=>handleExpandClick(order.id)}
                                        aria-expanded={expanded}
                                        aria-label="show more"
                                        color="secondary"
                                        style={{ margin: "0 auto" }}
                                      >
                                        <ExpandMoreIcon fontSize="large" />
                                      </IconButton>
                                    </Tooltip>
                                  </CardActions>
                                  <Collapse in={order.id === selectedId ? true : false} timeout="auto" unmountOnExit>
                                    <CardContent>
                                      // content inside the expanded card
                                    </CardContent>
                                  </Collapse>
                                </Card>
                              </Grid>
                            ))}
                      )}
                    </div>
                  )}
                </div>
              
            </div>
          );
        };
        
        export default Cancelled;
    

    【讨论】:

    • 我的订单 ID 是一个随机字符串和数字,类似于这些“1BjtZozLtFBxiwTvKidU”,因为我使用的是 Firestore。是否可以将 setSelected 设置为 orderID?
    • 谢谢,它确实有效,但是,如果我尝试展开某个卡并再次将其关闭,它将不再有效,我将不得不再次单击另一个以关闭上一张卡片。
    • 我已经更新了代码,现在如果你点击相同的,即已经打开的类,它会关闭它。请尝试让我知道
    猜你喜欢
    • 2021-06-11
    • 2019-12-19
    • 2021-07-21
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多