将映射数据传递到 Material-UI 模态

2024-03-11

我正在尝试将值列表传递给按钮。单击按钮时,应出现具有特定映射值的模式,但在我的情况下仅显示最后一个值(3)在我的数组中出现在所有模态中...... 我应该如何修复它?

  state = {
    open: false,
    stationData : [
      { id:1, number:'1' },
      { id:2, number:'2' },
      { id:3, number:'3' }
    ],
  };

  handleOpen = () => {
    this.setState({ open: true });
  };

  handleClose = () => {
    this.setState({ open: false });
  };

  render() {
    const {stationData} = this.state;
    {stationData.map((station,index) => (
        <div key={index}>
            <Button variant="contained" color="primary" style={styles.button} onClick={this.handleOpen}>
                {station.number}
            </Button>
            <Modal 
                open={this.state.open} 
                onClose={this.handleClose} 
                aria-labelledby={index} 
                aria-describedby={index}
            >
                <div style={styles.modal}>
                    {station.number}
                </div>
            </Modal>
        </div>
    ))}
  }

查看此代码sandbox https://codesandbox.io/s/rwnyq7zxpq


您正在创建三种不同的模式stationData.map()函数,并且每个函数都依赖于一个状态this.state.open。因此,每当按下按钮时,所有三个按钮都会打开,您会看到最后一个按钮位于顶部。所以 3 总是可见的。

您应该做的是 - 仅创建一个模式并跟踪在新状态下按下了哪个按钮this.state.stationNumber。这样,唯一的模态将会触发,并且它会知道从状态中渲染什么。

这是您修改后的代码,我在必要的地方添加了注释:

class Dashboard extends React.Component {
  state = {
    open: false,
    stationNumber: null,
    stationData: [
      { id: 1, number: "1" },
      { id: 2, number: "2" },
      { id: 3, number: "3" }
    ]
  };

  handleOpen = stationNumber => () => {
    // get which button was pressed via `stationNumber`
    // open the modal and set the `stationNumber` state to that argument
    this.setState({ open: true, stationNumber: stationNumber });
  };

  handleClose = () => {
    this.setState({ open: false });
  };
  render() {
    const { stationData } = this.state;

    return (
      <div style={styles.wrapper}>
        <div style={styles.body}>
          <Paper square elevation={0} style={styles.container}>
            {stationData.map((station, index) => (
              <div key={index}>
                <Button
                  variant="contained"
                  color="primary"
                  style={styles.button}
                  // pass which button was clicked as an argument
                  onClick={this.handleOpen(station.number)}
                >
                  {station.number}
                </Button>
              </div>
            ))}
          </Paper>

          {/* add only one modal */}
          <Modal open={this.state.open} onClose={this.handleClose}>
            {/* display the content based on newly set state */}
            <div style={styles.modal}>{this.state.stationNumber}</div>
          </Modal>
        </div>
      </div>
    );
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将映射数据传递到 Material-UI 模态 的相关文章

随机推荐

  • 前端计算价格不安全?

    我想知道是否可以操纵在前端完成的价格计算 我读了很多关于 JavaScript 价格计算器的文章 其中的业务逻辑仅在客户端 但对安全性却一无所知 考虑以下场景 React 应用程序有一个组件 表单 它根据其子组件 表单输入 的状态 用户交互
  • 请求映射中的双星号

    请求映射中出现双星号意味着什么 例如 RequestMapping value welcome method RequestMethod GET public ModelAndView welcomePage 一般来说 星号 通配符角色 意
  • DIO 响应解码问题

    我在用Dio为了使HTTP request var dio Dio var response await dio get URL final responseBody json decode response data final stat
  • 如何使用 Android 中的加速度计值计算特定轴的旋转速率

    我正在开发一个简单的游戏 其中角色仅沿 Y 轴上下移动 目前我正在使用加速度计读数来更改角色的 Y 速度 游戏运行良好 但最大的问题是你必须保持设备水平才能正常玩游戏 我真正想要的是仅当沿 Y 轴的旋转速率发生变化时才更改角色的 Y 速度
  • Azure SQL 频繁连接超时

    我们在 Azure 上运行一个 Web 应用程序 2 个实例 由 SQL Azure 数据库支持 在任何给定时间都有 50 150 个用户使用该网站 数据库以 S2 性能级别运行 DTU 平均约为 20 然而 每天都有几次我的日志中突然出现
  • 缓存从 pcap 捕获的数据包

    这是对此的后续问题 重建数据包以通过 pcap 注入 https stackoverflow com questions 8193281 rebuilding a packet to inject via pcap 我想要实现的目标 fun
  • 使用 LINQ 进行高效图遍历 - 消除递归

    今天我打算实现一种方法来遍历任意深度的图并将其展平为单个可枚举 相反 我先做了一些搜索 发现了这个 public static IEnumerable
  • 为什么使用 `<<-` 会让人皱眉,我该如何避免它?

    我关注了讨论HERE https stackoverflow com questions 9730651 how to avoid by using assign我很好奇为什么使用 lt lt 在R中皱起眉头 这会引起什么样的混乱呢 我还想
  • 使用 Powershell 编辑子文件夹中的 zip 文件内容

    我正在尝试更新从 Excel 文档创建的 zip 文件的内容 我想替换 zipfile xl connections xml 的一些内容 该部分脚本将列出 zip 文件的内容 shell app new object com shell a
  • Concepts(C++20) 可以用作布尔值吗?

    using T decltype std same as
  • 更改 MIFARE Classic 中扇区的身份验证密钥

    根据埃文的回答这一页 https forums tessel io t change auth code 1091 为了更改扇区的身份验证密钥 我们需要覆盖该扇区的第四个块 最后一个块 中的密钥 默认密钥始终为 FF FF FF FF FF
  • sqlite内存模式支持持久化到本地吗?

    什么是内存数据库 sqlite是内存数据库吗 该模式下是否支持将数据持久化到本地文件 内存数据库支持所有操作和数据库访问语法 但实际上并不持久 它只是内存中的数据结构 这使得它速度很快 非常适合开发人员实验和 相对少量的 临时数据 但不适合
  • 在 Google Play 商店上访问我的应用程序的统计信息 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我知道有一个 Android 开发者控制台 我可以检查有关我的应用程序的所有统计信息 我现在看到的那些统计信息 都是关于我的应用程
  • Rails 构建 N 条记录的序列化对象

    我想序列化文本列中的任何对象 通过 API 我得到参数 params attachments this can be 0 or 1 or 3 or 100 etc params attachment1 params attachment2
  • 以 AngularJS 方式使用 toastr

    目前 我只是打电话toastr success my message 需要时在控制器内 这个工作很好 但对我来说感觉有点脏 是否有 最佳实践 或推荐的 angularjs 使用方式toastr js 库 https github com C
  • DatePickerDialog.OnDateSetListener 在三星设备上未获得回调

    由于某些奇怪的原因 当我单击作为 DatePickerDialog 一部分的肯定按钮时 作为 DateSetListener 一部分的 onDateSet 方法不会被调用仅适用于三星设备 这就是我正在做的事情 DateSetListener
  • MySQL GROUP BY...同一字段具有不同值

    我想使用类似于以下的查询来检索中的所有行events至少有一个对应的event attendances行为 male and female 下面的查询不返回任何行 其中肯定有一些events具有event attendances来自两种性别
  • Google App Engine 上出现 500 服务器错误,不知道为什么

    在部署本地运行良好的 Web 应用程序时 我始终收到 500 错误 Error Server Error The server encountered an error and could not complete your request
  • React Native - 如何制作边框图像?

    我想制作一个边框图像View 如同边框图像 https developer mozilla org en US docs Web CSS border image在CSS中 我怎样才能实现它 我相信如果你使用样式组件 https www s
  • 将映射数据传递到 Material-UI 模态

    我正在尝试将值列表传递给按钮 单击按钮时 应出现具有特定映射值的模式 但在我的情况下仅显示最后一个值 3 在我的数组中出现在所有模态中 我应该如何修复它 state open false stationData id 1 number 1