当前位置: 首页 > 知识库问答 >
问题:

是否有方法防止基于某个条件触发事件?

贝财
2023-03-14

我正在构建一个ReactJS应用程序,我有一个在点击后调用的函数,但是我希望只有当屏幕宽度大于1200px时才会触发这个点击事件。

例如,在下面的代码中,我在子容器元素中添加了一个onClick事件,我想防止在屏幕宽度小于1200px时触发此onClick

有没有一种不使用监听器的方法可以做到这一点?

我知道我可以使用一个监听器并设置一个条件来确定是否会监听该事件;我还知道我可以在函数中设置条件,并阻止执行逻辑;我还可以创建两个不同的JSX元素(一个没有事件),并根据我的条件呈现一个或另一个。但是我想要的是保持元素上的onClick(不带addEventListener)并防止它被触发

可能是这样的:

这可能吗?

P. S.记住,我正在使用React,这段代码只是一个例子。

const test = () => {
  console.log('Test')
}
.subContainer {
  width: 100px;
  height: 20px;
  background-color: red;
  color: white;
  text-align: center;
  cursor: pointer;
}
<div class="container">
  <div class="subContainer" onClick="test()">Test<div>
</div>

共有3个答案

汪正雅
2023-03-14

根据这篇文章,将属性设置为false原因会做出反应,从超文本标记语言中省略它,这可能会导致事件从一开始就没有被调用,所以也许使用onClark={window.screen.width

刘兴朝
2023-03-14

您可以使用钩子来监听窗口大小,并根据onClick内的宽度传递函数

function App() {
  const size = useWindowSize();
  return (
    <div class="container">
      <div class="subContainer" onClick={size.width > 1200 ? test : null}>
        Test
      </div>
    </div>
  );
}

这里是一个链接到简单使用窗口钩子

洪博艺
2023-03-14

也许是这样:

import "./styles.css";

export default function App() {
  console.log(window.screen.width);
  let myCondition = window.screen.width > 1200;
  console.log(myCondition);
  const clickThis = () => {
    console.log("hello");
  };

  return (
    <div className="App">
      <button
        onClick={ myCondition ? clickThis : null}
      >
        Hello CodeSandbox
      </button>
    </div>
  );
}

而且,很明显它是window.screen.width,而不是window.screenWidth。

代码框

 类似资料:
  • 有没有办法防止事件链中的一些听众为事件开火,但允许链上的其他人开火? 比如我有这个结构 假设我已经将单击事件监听器连接到body、div#1和div#2。是否有可能在div#2事件监听器上阻止事件进入div#1或介于两者之间的任何其他监听器,并允许事件在body元素上触发? 我这样说是因为我使用谷歌地图和emberjs构建了一系列可以在地图上显示的交互式信息框。问题是ember将事件侦听器附加到b

  • 问题内容: 考虑以下代码段: 现在,假设外部div有一个与之关联的活动对象。我如何确保在内部任何地方都不会触发直播? 编辑: 这是要求的JS 单击“ .inner-div”时不应触发此操作 问题答案: 您必须向内部子级添加事件侦听器,并取消事件的传播。 在普通JS中,类似 要么

  • 问题内容: 这是我想做的事情:单击页面上的一个按钮,这又使(2)事情发生: 显示一个ModalPopup,以防止用户按下任何按钮或更改值 在方法后面调用我的代码,完成后隐藏ModalPopup 这是ASP标记: 现在,这是我在C#代码后面的代码: 为什么不起作用?ModalPopup可以完美显示,但是btnSaveData_Click事件从不触发。 更新: 第一个建议对我不起作用。我还尝试了您的第

  • 问题内容: 我想定期执行一个程序,如何在MySQL中做到这一点? 问题答案: 如果您拥有MySQL 5.1,则可以使用事件。 http://dev.mysql.com/doc/refman/5.1/zh- CN/events.html

  • 我们公司的一些团队目前正在“升级”一些遗留项目以使用Flyway。一个问题是存在多个具有已可用数据库对象(基线)的安装。 我们目前有一个用例(将来肯定会有更多),我们必须创建一些新的迁移脚本,但它们只能在满足数据库当前状态的特定条件时运行。 例如:运行此脚本,但仅当数据库中的表 X 包含数据 Y 时 我已经看到了Flyway条件数据库迁移,但对我来说,这似乎不是正确的解决方案,因为条件不仅仅是一些

  • 本文向大家介绍jQuery实现自动调用和触发某个事件的方法,包括了jQuery实现自动调用和触发某个事件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery实现自动调用和触发某个事件的方法。分享给大家供大家参考,具体如下: 我以点击事件为例,研究一下这个话题: jQuery 自动触发点击事件 1.比如我们通过jquery定义了一个点击事件,我们如何自动触发他: 1)自动触发点