React 和 Material UI:如何只扩展一张卡

2024-01-03

我使用 React 和 Material UI 来显示一些映射的卡片。当我尝试扩展一张卡时,所有卡都会同时扩展。我发现我必须在“handleExpandClick”函数中传递一个索引,但仍然不起作用。也许我犯了某种错字。

我发现这个问题单击展开一张卡片 https://stackoverflow.com/questions/57699182/expand-one-card-on-click这涉及同样的问题,但似乎不适用于我的情况。

这是我的代码:

const useStyles = makeStyles(theme => ({
  card: {
    maxWidth: 345,
    marginBottom: 15
  },
  media: {
    height: 0,
    paddingTop: "56.25%" // 16:9
  },
  expand: {
    transform: "rotate(0deg)",
    marginLeft: "auto",
    transition: theme.transitions.create("transform", {
      duration: theme.transitions.duration.shortest
    })
  },
  expandOpen: {
    transform: "rotate(180deg)"
  },
  avatar: {
    width: 90
  },
  root: {
    display: "flex",
    justifyContent: "center",
    flexWrap: "wrap",
    "& > *": {
      margin: theme.spacing(0.5)
    }
  },
  list: {
    width: 200
  }
}));

const ItininerariesList = ({ itineraries, activities }) => {
  const classes = useStyles();
  const [expanded, setExpanded] = React.useState(false);

  let path = window.location.pathname;
  let currentId = path.substring(path.lastIndexOf("/") + 1);

  const itinerariesPerCity = itineraries.filter(
    itiner => itiner.city_id === currentId
  );


  const handleExpandClick = () => {
    setExpanded(!expanded);
  };


  return (
    <Fragment>
      {itinerariesPerCity.map((itinerary, i) => (
        <Card className={classes.card} key={itinerary._id}>
          <CardHeader
            avatar={
              <Grid
                container
                direction="column"
                justify="flex-start"
                alignItems="center"
                className={classes.avatar}
              >
                <Avatar
                  aria-label="user"
                  alt={itinerary.profile_name}
                  src={itinerary.profile_img}
                >
                  <PersonIcon />
                </Avatar>
                <Typography variant="caption" component="p">
                  {itinerary.profile_name}
                </Typography>
              </Grid>
            }
            action={
              <IconButton aria-label="settings">
                <MoreVertIcon />
              </IconButton>
            }
            title={itinerary.title}
            subheader={itinerary.sub_title}
          />

          <CardContent>

          </CardContent>
          <CardActions disableSpacing>
            <IconButton aria-label="add to favorites">
              <FavoriteIcon />
            </IconButton>
            <IconButton aria-label="share">
              <ShareIcon />
            </IconButton>
            <IconButton
              className={clsx(classes.expand, {
                [classes.expandOpen]: expanded
              })}
              onClick={() => handleExpandClick()}
              aria-expanded={expanded}
              aria-label="show more"
            >
              <ExpandMoreIcon />
            </IconButton>
          </CardActions>
          <Collapse in={expanded} timeout="auto" unmountOnExit>
            <CardContent>
              <ActivitiesList
                activities={activities}
                itineraryId={itinerary._id}
              />
            </CardContent>
          </Collapse>
        </Card>
      ))}
    </Fragment>
  );
};

export default ItininerariesList;

任何建议或指导将不胜感激。先感谢您。


在展开处理程序中,您确实必须传递索引。并且在状态下也使用它。 像这样的东西:

const [expandedId, setExpandedId] = React.useState(-1);

...

  const handleExpandClick = (i) => {
    setExpandedId(expandedId === i ? -1 : i);
  };

  ...


          <CardContent />
          <CardActions disableSpacing>
            <IconButton aria-label="add to favorites">
              <FavoriteIcon />
            </IconButton>
            <IconButton aria-label="share">
              <ShareIcon />
            </IconButton>
            <IconButton

              onClick={() => handleExpandClick(i)}
              aria-expanded={expandedId === i}
              aria-label="show more"
            >
              <ExpandMoreIcon />
            </IconButton>
          </CardActions>
          <Collapse in={expandedId === i} timeout="auto" unmountOnExit>
            <CardContent>
              <div>ActivitiesList</div>
            </CardContent>
          </Collapse>

这是一个工作示例:https://codesandbox.io/s/eloquent-sara-wswrn https://codesandbox.io/s/eloquent-sara-wswrn

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React 和 Material UI:如何只扩展一张卡 的相关文章

  • Three.js:缩放几何图形后错误的 BoundingBox

    在我的场景中 我有一个简单的立方体 var test new THREE Mesh new THREE CubeGeometry 10 10 10 new THREE MeshBasicMaterial scene add test 该立方
  • IE从哪个版本开始支持Object.create(null)?

    您可以通过多种方式在 JavaScript 中创建对象 creates an object which makes the Object prototype of data var data1 new Object Object liter
  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • 如何将内联 JavaScript 与 Express/Node.js 中动态生成的内容分开?

    对于具有几年 Web 开发经验但没有找到答案的人来说 这是一个有点菜鸟的问题程序员堆栈交换 or Google 我决定在这里问一下 我在用Express网络框架Node js 但这个问题并不特定于任何 Web 框架或编程语言 以下是从数据库
  • 如何针对 Node.js 中发生的每个错误发送电子邮件?

    假设我的 node js 应用程序正在运行 如果出现错误 我的意思是所有错误 不仅仅是网络错误 如果出现错误 则很重要 我如何调用函数向我发送电子邮件 基本上 在我希望它写入 err out 之前 我希望向我发送一封电子邮件 我正在使用no
  • 使用 dc.js 按条形值对条形图中的条形进行排序(排序)

    如何通过维度的计算值而不是维度本身的名称对 dc js 示例中的 x 轴 维度 进行排序 例如 请考虑序数条形图的 dc js 示例 https github com dc js dc js blob master web examples
  • 隐藏 Div 的父级

    我只是想隐藏父divcomments section div class content content green div div div 我试过这个 document getElementById comments section pa
  • Bootstrap按钮加载+Ajax

    我正在使用 Twitter Bootstrap 的按钮加载状态 http twitter github com bootstrap javascript html buttons http twitter github com bootst
  • 在 HTML5 画布中,如何用我选择的背景遮盖图像?

    我试图用画布来实现这一点 globalCompositeOperation 但没有运气 所以我在这里问 这里有类似的问题 但我没有在其中找到我的案例 我的画布区域中有图层 从下到上的绘制顺序 画布底座填充纯白色 fff 用fillRect
  • window.location 和 location.href 之间的区别

    我对之间的区别感到困惑window location and location href 两者似乎都以相同的方式行事 有什么不同 window location是一个对象 它保存有关当前文档位置的所有信息 主机 href 端口 协议等 lo
  • 页面上使用 HTML Editor Extender 进行回发会导致 IE11 中出现 JavaScript 错误

    我已将 HTML 编辑器扩展程序添加到我正在处理的页面中 现在每当我在页面上发回帖子时 都会收到以下 Javascript 错误 JavaScript 运行时错误 参数无效 之后什么也没有发生 这在 IE10 或更低版本以及我所知道的所有其
  • className 属性是否承担 Reactjs 中 id 属性的角色?

    由于 id 属性在 Reactjs 组件中很少使用 因为 id 属性意味着组件不会被重用 那么是否使用 className 属性来代替 id 呢 如果是这样的话 那么 Reactjs 中相当于 HTML 中的 class 属性的是什么 cl
  • Firebase 函数 onWrite 未被调用

    我正在尝试使用 Firebase 函数实现一个触发器 该触发器会复制数据库中的一些数据 我想观看所有添加的内容votes user vote 结构为 我尝试的代码是 const functions require firebase func
  • 在移动设备上滚动

    这个问题更多的是一个建议研究 我确实希望它对其他人有帮助 并且它不会关闭 因为我不太确定在哪里寻求有关此事的建议 在过去的 6 个月里 我一直在进行移动开发 我有机会处理各种设备上的各种情况和错误 最麻烦的是滚动问题 当涉及到在网站的多个区
  • 日期出现奇怪的错误,“未捕获非法访问”

    所以我试图找到最新的DateJavascript 可以处理 我把它减少到 9 月 275760 并增加了我开始捕获未捕获的天数illegal access例外new Date 09 24 275760 to new Date 10 13 2
  • 使用 Vue 的多模式组件

    我在 Vue 中实现动态模式组件时遇到问题 A common approach I follow to display a set of data fetched from the db is I dump each of the rows
  • Javascript - 水波纹效果

    我需要 JS 上的脚本 它将以 水波纹 样式更改 images html 抱歉 6MB GIF 文件 http fcuunited ru temp listening2 gif http fcunited ru temp listening
  • 带参数的事件监听器

    我想将参数传递给 JavaScript 中的事件侦听器 我已经找到了解决方案 但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用 我有 C C 背景 但是 Javascript 函数的执行有很大不同 您能否帮助我理解以下示例如何
  • Cypress 在 Create React App 中返回 .scss 文件的 webpack 编译错误

    我正在尝试将 Cypress 添加到非常基本的 CRA 但遇到了 Cypress 无法理解 scss 文件的问题 当我跑步时npm run cypress运行测试 我收到以下错误 Error Webpack Compilation Erro
  • 如何在执行新操作时取消先前操作的执行?

    我有一个动作创建器 它会进行昂贵的计算 并在每次用户输入内容时调度一个动作 基本上是实时更新 但是 如果用户输入多个内容 我不希望之前昂贵的计算完全运行 理想情况下 我希望能够取消执行先前的计算并只执行当前的计算 没有内置功能可以取消Pro

随机推荐

  • 序言,复制列表

    我试图掌握一些基本的序言 但在这个过程中有点挣扎 具体来说 我正在尝试遍历项目列表并将其逐项复制到新列表中 我可以让它反转 但我发现不反转会更棘手 我一直在尝试以下操作 copy L R accCp L R accCp R accCp H
  • 如何找出使用了哪个可绘制资源?

    我想知道运行来自 ldpi mdpi hdpi 或 xhdpi 的应用程序时使用了哪个可绘制资源 您应该能够按照所述获取设备的显示属性here https stackoverflow com a 3166582 1029225然后通过将结果
  • 无法使用最新的 Firebase 框架读取/写入 Nest Firebase 值

    我一直在尝试将 Nest 集成到我的 iOS 应用程序中 遵循有关用户身份验证的所有说明 然后调用 Nest API 我使用 Nest 的 iOS 示例应用程序作为参考 https github com nestlabs iOS NestD
  • Apache Camel 计时器:“周期”与“固定速率”

    period 和 fixedRate 一起的确切用法是什么 这真的有意义吗 因为如果我指定了 周期 值 那么无论如何计时器都会在该间隔后触发 所以 fixedRate 标志的确切用途是什么 我很困惑请帮助我 您可以在以下位置阅读 java
  • 如果 CSS“user-select=none”元素的文本位于元素之间,则该元素的文本将被复制

    看看这个片段 noselect webkit touch callout none iOS Safari webkit user select none Safari khtml user select none Konqueror HTM
  • 在 RDD[(String, Int)] 上 saveAsTextFile 时如何删除记录周围的括号?

    我在用着saveAsTextFile path 以便将输出保存为文本文件 以便稍后将结果导入数据库 输出看起来像这样 value1 value2 如何去掉括号 您可以尝试以下非常基本的操作 rdd map x gt x 1 x 2 save
  • 如何替换 therubyracer javascript 运行时

    我该如何更换therubyracer宝石 我真的被困住了 我们一直在使用therubyracer我们的 Rails 资产管道的 gem 然而 它使用的依赖项已经过期并且存在安全漏洞 最新版本0 12 3是从 2017 年 1 月 5 日开始
  • 在电脑上未安装python的情况下运行python脚本

    我创建了一些数据处理脚本 它们需要每天执行 但是PC的数量接近150台 我无法在所有PC上手动安装Python 所以我需要一种方法让这些在这些 Windows 系统上工作 我尝试使用 PyInstaller 创建 exe 并将其放置在服务器
  • 自动完成内的 InputLabelProps 不受尊重

    我正在尝试使标签在内部可供选择和复制Autocomplete组件通过设置InputLabelProps sx userSelect text inside renderInput 理想情况下 我希望可以单击或双击来选择标签文本 export
  • 访问 Silverlight DataTemplate 内的元素

    尽管已经有一些相关问题 但我无法找到以下问题的干净解决方案 如果我有一个被多次使用的数据模板 例如 TreeViewItem Header 模板 我如何才能仅更改某些 TreeView 项目的模板 例如 假设我的 TVI HeaderTem
  • 处理证书时发生未知错误

    我有一个自签名证书 我想在我的 websockets 服务器上使用它来处理来自 wss localhost 443 的请求 我从任何网络浏览器连接到服务器 但是 我似乎无法正确进行身份验证 每次我尝试通过 Advanced Rest Cli
  • Play Framework 2.2.1 (Java) 中的 AspectJ

    我想将 AspectJ Weaving 包含在 Play 2 2 1 项目中 我只找到一个答案解释如何将 AspectJ 添加到 Play 2 1 1 项目 https stackoverflow com a 16606135 346421
  • 如何在 UIAlertView 中对齐消息?

    我想知道如何设置警报视图的委托消息的对齐方式 任何人都有解决方案 请回复一些代码 这只是之前答案的稍微简化版本 但我喜欢保持简单 for UIView view in alert subviews if view class isSubcl
  • iPhone 5 及以下版本应用程序崩溃

    我发布了一个简单的游戏 可以在 iPhone 5s 6 6s 和 iPad 上正常运行 但当在 iPhone 5 5c 4S 或 4 上运行时 应用程序会在出现以下代码时崩溃 let delay Int arc4random uniform
  • Junit 断言双数组

    我如何断言两个数组doubles 包含相同的元素 有一些方法可以断言整数数组和其他基本类型包含相同的元素 但不适用于doubles JUnit 4 12 有 实际上它已经是 4 6 的一部分 这是 github 上可用的最旧版本 org j
  • 如何查明特定设备是否支持 SIM 硬件?

    我想根据 SIM 硬件是否存在来禁用我的应用程序中与 CALL 和 SMS 相关的功能 现在 初学者的方法是使用以下命令检查电话类型 if telephonyManager1 getPhoneType TelephonyManager PH
  • 使用带有 fields_for 的数组

    如何使用 fields for 迭代对象数组 全部相同模型 该数组包含由 current user 创建的对象 我目前有 p class fields p
  • 如何解决错误:在此服务器上找不到请求的地址 - CakePHP

    我在我的项目中使用 CakePHP 2 X 但陷入了困境 首先让你知道我使用表单实现了搜索功能POST方法 但为此我发现分页错误 过滤器将不支持下一页 所以我将表单方法更改为GET 现在工作正常 不完全是我所需要的 所有请求的数据都显示在
  • 将非拥有窗口始终设置在顶部 - 就像应用程序“Afloat”

    我设置了一个全局热键RegisterEventHotkey 当用户按下它时 它会获取当前聚焦的窗口CGWindowListCopyWindowInfo 然后我需要将它始终设置在顶部 如果当前窗口在我的进程中 我正在从中执行代码 我可以简单地
  • React 和 Material UI:如何只扩展一张卡

    我使用 React 和 Material UI 来显示一些映射的卡片 当我尝试扩展一张卡时 所有卡都会同时扩展 我发现我必须在 handleExpandClick 函数中传递一个索引 但仍然不起作用 也许我犯了某种错字 我发现这个问题单击展