React:如何仅显示特定 div 的模式弹出窗口

2023-12-25

为了更清楚地说,基本上我想做的就是像亚马逊一样

将会有一堆产品,一旦您单击该产品,只有该产品及其详细信息将显示在弹出模态上。

就我而言,我已将 3 个数据存储在一个数组中,我已将其映射出来,这将创建 3div 和 3Modal Popup,每个数据中都带有按钮。

单击 1st div 的按钮后,我希望仅对第一个 div 打开模式。

但现在当我点击按钮时,所有 3 个模态弹出窗口都会出现。

我是 React 新手,我可以在 JQuery 和 Javascript 中做同样的事情,但我无法在 React 中实现这一点。

或者有更好的方法吗?就像而不是循环和创建 3modal popup 我们可以只创建一个modal popup,它将显示正在单击的按钮的特定 div 的数据吗?

我当前的代码:

App.js ,我在其中创建了数组

Product.Js 它被映射到 3div 中并且还有模态弹出窗口

如果你们需要更多详细信息,请告诉我

感谢你们。

3 Div that is being dunamically created with the data from array enter image description here

但是当我点击任何按钮时,所有div的弹出窗口都会弹出,这就是问题


当然,所有的模态框都会同时弹出。所有模态都使用完全相同的状态,即this.state.showModal。一旦得到true然后一切都会弹出。如果你仍然喜欢这样的 3 个模态框。我建议你把价值showModal带有 JSON 值的状态。也许是这样的:

state = {
    showModal: {}
}

然后对于getModal()功能:

getModal = value => {//still using variable from `data.id`
    let key_to_update = {};
    key_to_update[value] = true;
    this.setState( {
        showModal: Object.assign( {}, this.state.showModal, key_to_update )
    } );
}



那么对于<Modal/>应该看起来像这样:

<Modal show={this.state.showModal[data.id]} onClick={()=> this.hideModal(data.id)}/>



要隐藏模式,您可以执行相反的操作getModal()如下:

hideModal = value => {//still using variable from `data.id`
    let key_to_update = {};
    key_to_update[value] = false;//Just different on this
    this.setState( {
        showModal: Object.assign( {}, this.state.showModal, key_to_update )
    } );
}

如果您仍然感兴趣并且在实现它时遇到问题,我可以帮助您创建一个工作演示。因为我并没有真正测试代码,只是根据我的经验和快速分析来编写它。然而,就我个人而言,我喜欢针对这种情况使用单个模态。只需设置“产品详细信息”的单个“状态”,然后从单个模态中读取该“状态”,然后同时显示它。

==== 演示:多模态元素技术 =====

就像你的评论一样,因为你只需要一次显示单个模态,那么就会容易得多。我们不需要像上面那样有多个真/假条件。我们可以使用data.id作为真/假检查showModal状态如下:

class Product extends Component {
  state = {
    showModal: 0
  };

  getModal = value => {
    this.setState({ showModal: value });
  };

  hideModal = value => {
    this.setState({ showModal: 0 });
  };

  render() {
    return (
      <div className="container">
        {this.props.data.map((data, key) => (
          <div key={key} className="small">
            <p>Namsse: {data.name}</p>

            <button onClick={() => this.getModal(data.id)}>Popup</button>

            <Modal
              show={this.state.showModal === data.id}
              onHide={() => this.hideModal(data.id)}
              name={data.name}
            />
          </div>
        ))}
      </div>
    );
  }
}

工作演示:https://codesandbox.io/s/pkjvy72mw0 https://codesandbox.io/s/pkjvy72mw0



===演示:单模态元素技术===

您也可以只拥有一个<Modal/>元素如下所示:

class Product extends Component {
  state = {
    showModal: false,
    dataModal: {
      name: ""
    }
  };

  getModal = data => {
    this.setState({ showModal: true, dataModal: data });
  };

  hideModal = () => {
    this.setState({ showModal: false });
  };

  render() {
    return (
      <div className="container">
        {this.props.data.map((data, key) => (
          <div key={key} className="small">
            <p>Namsse: {data.name}</p>

            <button onClick={() => this.getModal(data)}>Popup</button>
          </div>
        ))}

        <Modal
          show={this.state.showModal}
          onHide={this.hideModal}
          name={this.state.dataModal.name}
        />
      </div>
    );
  }
}

工作演示:https://codesandbox.io/s/53x7m726xk https://codesandbox.io/s/53x7m726xk

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

React:如何仅显示特定 div 的模式弹出窗口 的相关文章

  • TypeError: props.render 不是一个函数(React hook 形式)

    我将方法作为我用react hook form制作的形式的道具传递 当从react hook form添加控制器时 它给了我 TypeError props render不是一个函数 我在网上找不到任何解决方案 因此感谢任何帮助 impor
  • 如何重定向到 instagram://user?username={username}

    我的 html 页面上有这个链接 可以在特定用户上打开 Instagram 应用程序 a href Link to Instagram Profile a 我一直在寻找自动运行 url instagram user username USE
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 检查 JavaScript 字符串是否为 URL

    JavaScript 有没有办法检查字符串是否是 URL 正则表达式被排除在外 因为 URL 很可能是这样写的stackoverflow 也就是说它可能没有 com www or http 如果你想检查一个字符串是否是有效的 HTTP UR
  • 如何防止 Iframe 在与浏览器交互后弄乱浏览器的历史记录?

    因此 就我而言 我使用 Iframe 将 Grafana 附加到我的页面 这为我提供了漂亮且易于使用的图表 可以注意到 每次在图表上进行放大或缩小 使用鼠标单击 交互后 Grafana 的 Iframe 都会在我的 Angular 页面上触
  • 使用 Angular 下载具有动态 src 的脚本

    Angular 提供了通过动态名称动态加载模板的方法ng include 该部分中的内联 JS 和 CSS 可以正常加载 但没有一个好的方法来下载带有动态 url 的脚本 我们需要下载脚本 相对于调用它们的 html 部分的路径 即我们有一
  • 如何将背景图像仅应用于一个反应页面而不是整个应用程序?

    注册页面示例 register background image linear gradient to right ff5722 0 ff9800 100 margin top 150px important div div div div
  • 标签获取 href 值

    我有以下 html div class threeimages a img alt Australia src Images Services 20button tcm7 9688 gif a div class text h2 a hre
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • Meteor - 从客户端取消服务器方法

    我正在通过服务器方法执行数据库计数 用户可以选择他们希望如何执行计数 然后调用该方法 我的问题是 计数可能需要一些时间 并且用户可能会在方法运行时改变主意并请求不同的计数 有什么方法可以取消调用的方法并运行新的计数吗 我认为 this un
  • 在javascript中解析json - 长数字被四舍五入

    我需要解析一个包含长数字的 json 在 java servlet 中生成 问题是长数字被四舍五入 当执行这段代码时 var s x 6855337641038665531 var obj JSON parse s alert obj x
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • Babel 7 Jest Core JS“TypeError:wks不是函数”

    将我的项目升级到 Babel 7 后 通过 Jest 运行测试会抛出以下错误 测试在 Babel 6 中运行没有任何问题 但在 Babel 7 中失败并出现以下错误 TypeError wks is not a function at Ob
  • Firefox 书签探索未超过 Javascript 的第一级

    我已经编写了一些代码来探索我的 Firefox 书签 但我只获得了第一级书签 即我没有获得文件夹中的链接 e g 搜索引擎 雅虎网站 谷歌网站 在此示例中 我只能访问 Search engines 和 google com 不能访问 yah
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • 条件在反应本机生产中失败,但在开发中有效

    我创建了一个反应本机应用程序 我需要通过它进行比较 如果属实 就会执行死刑 问题是 该条件适用于 React Native 开发模式 而不适用于 React Native 生产版本 我使用 firebase 作为数据库 也使用 redux
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交
  • 问题:为什么React Native Video不能全屏播放视频?

    我正在react native 0 57 7 中为android和ios创建一个应用程序并使用反应本机视频 https github com react native community react native video播放上传到的视频
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • 如何获取浏览器视口中当前显示的内容

    如何获取当前正在显示长文档的哪一部分的指示 例如 如果我的 html 包含 1 000 行 1 2 3 9991000 并且用户位于显示第 500 行的中间附近 那么我想得到 500 n501 n502 或类似的内容 显然 大多数场景都会比

随机推荐

  • Android AlarmManager 是否处理夏令时更改?

    我正在 Android 中构建一个闹钟应用程序 AlarmManager 是否自动处理夏季和冬季之间的时钟变化 还是我需要明确管理 编辑 如果在重复间隔与时钟变化交叉的地方设置闹钟 是否需要重新安排该闹钟 与接受的答案所说的相反 我在我的应
  • 单元测试执行速度(每秒测试多少次?)

    您的单元测试的目标执行率是多少 每秒测试次数 对于单个单元测试来说多长时间才算太长 我很想知道人们是否有任何特定的阈值来确定他们的测试是否太慢 或者只是当长时间运行的测试套件的摩擦让你变得更好时 最后 当您确实决定测试需要运行得更快时 您使
  • 在表单提交时触发谷歌分析事件

    我正在尝试将分析事件跟踪添加到 onclick 事件中 以便在表单上提交输入 我尝试了多个不同的示例 并参考了几个不同的 SO 帖子来达到这一点 我可以通过 onclick 来提交表单或触发跟踪事件 但不能同时执行两者 第一个例子 向控制台
  • python 2.7 无法再安装 pip 了吗?

    我想使用与 python 2 7 但不是 3 8 兼容的 python 脚本 我需要 pip 才能使脚本正常工作 但看起来我无法再安装 pip 了 我尝试使用 get pip py 但它不起作用 user DESKTOP J9T7UBF g
  • 如何访问工件的 BUILDNUMBER 是 Visual Studio Team Services 发布管理

    我需要访问 Visual Studio Team Services 发布管理中的工件的内部版本号 以便可以将该值发送到任务 我的工件名称中有一个空格 Production Branch 我一直在阅读以下文档 https www visual
  • SwiftUI 节标题 - 使用非大写?

    创建列表如下 struct ContentView View var body some View List Section header Text Header Text Row 1 Text Row 2 listStyle PlainL
  • 避免重复的浏览器选项卡或窗口 (window.open())

    在 Javascript 中 我们可以使用 window open 打开新的浏览器窗口或选项卡 但如果选项卡已打开 则应仅突出显示该选项卡 它不应该打开重复的选项卡 怎么做 The 第二个参数 https developer mozilla
  • 使用 ggplot facet_grid 在不同条件下绘制相同变量的散点图?

    我想将数据帧的同一列与具有不同行值的点相关联 例如 在iris数据框 我想制作三个散点图进行比较Petal Length of virginica与那个versicolor setosa with virginica and versico
  • 数据库服务器或数据库表中的用户

    我遇到了一个关于客户端服务器应用程序设计的有趣问题 我们有一个基于浏览器的管理应用程序 有许多用户使用该系统 显然 在该应用程序中我们有一个用户管理模块 我一直认为在数据库中拥有一个用户表来保存所有登录详细信息就足够了 然而 一位资深开发人
  • 在java中将HTML表格写入PDF [重复]

    这个问题在这里已经有答案了 可能的重复 将 HTML 文件转换为 PDF https stackoverflow com questions 633780 converting html files to pdf 从 XML 或 HTML
  • 使用变量 self 与 this 之间的区别

    我一直在努力将这些 this 与 bind 方法一起使用以及变量 self this 的使用 在得到两个不同的结果时 所以我错过了一个概念 案例如下 Defining a callback class to use after retrie
  • 使用 posix 而不是 fork/execv 运行 bash

    我有一个 CLI 其中一个命令是进入 Linux bash shell 这是使用 fork 和 execv 执行此操作的代码 if pid fork lt 0 syslog debug LOG ERR Could not fork if p
  • Delphi 和 ADO:日期时间到字符串的转换

    我使用 Delphi 2006 和 ADO 连接到 MS Access 数据库 我检索的一些字段是日期字段 在 Access 中格式为 中日期 即 20 4 2010 但是我必须将它们作为字符串检索 FValue FAccessADOQue
  • 获取父对象的值

    有没有办法从对象的父对象获取键值 在下面的例子中 我想结合urlParent with section const linkItems id 1 name Home Page urlParent home subItems subId 1
  • 应用程序配置错误,无法使用发布密钥哈希进行 Facebook 登录

    我已将 Facebook 集成到我的应用程序中 我用调试密钥哈希测试了我的应用程序在模拟器和我的设备 HTC 中都正常 当我为签名的 APK 尝试发布密钥哈希时 我的设备 HTC One X 中总是出现 应用程序配置错误 无法登录 Face
  • 脚本错误:溢出:'CInt' - VBScript

    将计数器添加到 5 位以上的下一个数字时 有溢出 如果是 5 位数字 则不会出现错误 我用的是VBScript Counter CInt Counter CInt Qty 我想在分子中使用 7 位数字 如何解决这个问题呢 很确定这个问题之前
  • 使用 class-validator 包在 Nest.js 创建用于图像上传的自定义验证器

    我想验证 Nest js 中文件的 mimetype 但我不能 UseInterceptors FileInterceptor image Post upload profile photo async uploadProfilePhoto
  • 为什么 el.style.backgroundImage 在此功能上下文中不起作用?

    我针对这个问题写了一个答案 根据 url 新背景 https stackoverflow com questions 13000944 new background according to url 我在答案中发布的代码是检查 URL 中是
  • 城市飞艇在起飞时坠毁。非法参数异常

    我在 Application onCreate 中的代码 该应用程序崩溃于UAirship takeoff this options 请帮忙 public class LiveVideoApplication extends Applica
  • React:如何仅显示特定 div 的模式弹出窗口

    为了更清楚地说 基本上我想做的就是像亚马逊一样 将会有一堆产品 一旦您单击该产品 只有该产品及其详细信息将显示在弹出模态上 就我而言 我已将 3 个数据存储在一个数组中 我已将其映射出来 这将创建 3div 和 3Modal Popup 每