我想创建一个带有 render 方法的 React 组件,该方法具有<a>如果您愿意的话,可以包裹整个“盒子”的标签,单击后会重定向到另一个页面。在所述盒子内有一个<button>单击该按钮可以激活更改状态的事件。 我想要做的是单击<button>并在没有重定向的情况下触发事件<a>标签发生。

使用 stopPropagation() 尝试了一些想法,但没有运气:/我不想将按钮移到外面<a>标记要么所以不知道从这里去哪里。

看起来应该很简单,但我就是想不出来。谢谢!

渲染方法如下所示:

render(){
 return(
  <div>
   <a href="http://www.google.com"> 
    <div className="box">

     <h2 className="title">Random Title</h2>

     <button onClick={this.handleClick}> Like </button>

    </div>  
   </a>
  </div> 
 )
}

handleClick() 看起来像这样:

handleClick = () => {
  if (this.state.liked) {
  console.log("disliking")
} else {
  console.log("liking")
}

this.setState({ liked: !this.state.liked})
}

你可以通过一个简单的技巧来实现这一点。看看我做了什么 -

  1. 将锚点替换为 div 并放置点击处理程序
  2. 在组件中添加一个标志(单击),如果是按钮单击,则在 div 单击处理程序中忽略
  3. 重置标志

更新 - 看看这个 js 小提琴: https://jsfiddle.net/rabinarayanb/pvx2n3x3/ https://jsfiddle.net/rabinarayanb/pvx2n3x3/

注意 - 我使用了 es5 语法。你可以转换成es6

(function() {   
    var BoxSetup = React.createClass({


        clicked : "",

        getInitialState : function () {
            return { clickCount : 0};
        },

        handleDivClick : function (event) {
            if (this.clicked !== "Button") {
                window.location.href = "http://www.google.com";
            }

            // reset
            this.clicked = "";
        },

        handleButtonClick : function (event) {
           this.clicked = "Button"
           this.setState({
                clickCount : ++this.state.clickCount
           });
        },

        render : function () {

            return (
            <div>
                <div onClick={this.handleDivClick} style={ { }}>
                    <div style={ { width : "100px", height : "100px", border : "1px solid red" } }>
                        <h2 className="title">{ this.state.clickCount }</h2>
                        <button onClick={this.handleButtonClick}> Like </button>
                    </div>
                </div>
            </div> 
            );
        }
    });

    var element = React.createElement(BoxSetup, { title : "Hello" });

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

  • 在特定页面上执行 javascript 的正确“Rails”方式

    我试图在特定页面上运行 javascript 而我唯一的解决方案似乎是反模式 我有controller js内部生成的assets javascripts 我在用着gem jquery turbolinks 我的代码类似于以下内容 docu
  • 在 Internet Explorer 中使用什么来监视 jscript 内存使用情况

    我们正在调试 GWT 应用程序 在 Firefox 中运行正常 在 IE6 0 中开始运行正常 但一段时间后 它就会崩溃并开始爬行 经过一些测试后 我们怀疑存在一些内存问题 使用了太多内存 内存泄漏等 除了使用taskmanager和pro
  • 位置特征检测:固定

    我正在尝试找到一个脚本来检测设备是否放置position fixed元素相对于视口而不是整个文档 目前 标准桌面浏览器和 Mobile Safari 适用于 iOS 5 都是这样做的 而 Android 设备则相对于整个文档放置固定元素 我
  • 使用 Node.js 构建网站的最佳实践

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我想知道如何使用 Node js 从头开始 开发一个网站 我明白我怎么能possibly
  • 如何使用有角度的材料创建卡片网格?

    我正在尝试使用 ng repeat 创建每行三张卡片的网格 我有一个普通的 javascript 对象数组附加到范围 下面的代码将为每张卡创建一个新行 div div
  • 为什么 window 与 Internet Explorer 中的 window.self 不同?

    关于我如何遇到这个问题有一个复杂的背景故事 但为什么self属性不完全等于窗口本身 在 Safari 和 Firefox 及其朋友中 结果如我所料 gt window window self true gt window window se
  • 想要动态处理与分页相关的页码显示:ReactJS

    我有一些分页逻辑工作得很好 唯一的问题是我只能让它显示并固定数量的页面可供选择 现在我已经把它放到了 5 页 但我希望它能够根据总记录动态更改 假设我有 100 条记录 每页限制为 10 条 将有 10 页 现在我只能让它以这种方式显示 第
  • 如何在React Native Android中获取响应头?

    您好 我想在获取 POST 请求后获取响应标头 我尝试调试看看里面有什么response with console log response 我可以从以下位置获取响应机构responseData但我不知道如何获取标题 我想同时获得标题和正文
  • IntersectionObserver是否支持水平滚动观察?

    我制作了几个垂直滚动 IntersectionObserver 模块 但我对水平滚动感兴趣 根将是 div 观察目标将是 img 我想观察当 img 放大但 div 保持视口宽度时的变化 我什至不确定移动 Safari 是否会将缩放后的图片
  • 导航栏下拉菜单(折叠)在 Bootstrap 5 中不起作用

    我在尝试使用以下命令创建响应式菜单或下拉按钮时遇到问题Bootstrap 5一切似乎都正常 导航图标和下拉图标出现 但它不起作用 当我单击nav图标或dropdown按钮 无dropdown menu apears 我想特别提到的是 我还包
  • 按下回车键时不刷新页面

    我遇到了一些问题 只要表单中有输入 回车键就会触发页面刷新 下面的代码 如果按下回车并且文本区域 input 中没有输入任何文本 则不会刷新页面 但是如果按下回车并且 input中有输入或者光标位于文本区域 我不确定是什么触发了它 因为 s
  • React autoFocus 将光标设置为输入值的开头

    我有一个受控输入 最初显示一个值 我已将该输入设置为自动聚焦 但当我希望它出现在末尾时 光标出现在输入的开头 我知道这可能是因为自动对焦是在值之前添加的 但我不能 100 确定 在输入字段末尾完成光标初始化的最佳方法是什么 var Test
  • 如何使用 Javascript 设置查询字符串

    有没有办法使用 javascript 设置查询字符串的值 我的页面有一个过滤器列表 单击该列表时 它将更改右侧的页内结果窗格 我正在尝试更新 url 的查询字符串值 因此如果用户离开页面 然后单击 后退 按钮 他们将返回到最后一个过滤器选择
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • JavaScript RegEx:不同的结果:使用字符串和使用正则表达式“文字”构建模式?

    使用 RegExp 文字与字符串之间有什么区别吗 http jsfiddle net yMMrk http jsfiddle net yMMrk String prototype lastIndexOf function pattern p
  • 改变 JavaScript 中的顶部填充

    以下是我在 css 中设置顶部填充的方法 body font size font size px margin 0 padding 100px 0 20px 0 width 100 important 如何使用最简单的 javascript
  • 聆听 Angular 2 中的元素可见性

    我正在为我的网络应用程序使用 Bootstrap 和 Angular 2 v4 我想监听指令中的元素以了解可见性变化 我的元素有一个可以隐藏其子元素的父元素hidden sm up我需要在每次隐藏或显示时触发一个函数 div hidden
  • 使用 Javascript 设置 cookie [重复]

    这个问题在这里已经有答案了 我正在尝试构建我的第一个移动应用程序 它需要连接到我的 mysql 数据库并使用 json 返回数据 这很好 目前我有一个登录系统 一旦确定用户名和密码存在 它就会返回一条成功消息 对于下一步 我想在我的页面上使
  • 使用javascript动态更新css内容

    需要将 css 更新为动态值 我不确定最好的方法是什么 div style zoom 1 div 缩放级别将根据窗口大小调整触发 应用程序将相应缩放 我将此应用程序加载到 cordova 中并让它在 iPAD 中运行 然后我意识到需要使用
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供

随机推荐

  • Rails 和 Markdown 以及编辑器

    Mark down 编辑器是否已移植到 Rails 应用程序 与此 SO 上使用的相同 解析 Markdown 标记怎么样 大多数所见即所得编辑器应该很容易集成到您的应用程序中 而不需要特定于 Rails 的 gem 插件 这是一个支持 M
  • 如何在android中播放.opus音频文件?

    我正在开发一个应用程序 用于使用谷歌云语音 APi 识别语音并同时录制音频 git link https github com rowntreerob Google speech Opus Recorder我尝试播放录制的 opus 音频文
  • 在 VBScript 中使用 DLL

    我已将 C 代码编译到 DLL 中 但对它们缺乏经验 我的 C 代码包含一个类HelloWorld使用静态方法Print 我想在 VBScript 中使用这个 DLL 来调用该方法Print 我知道这是基础 但我将其用作最终将编译为 DLL
  • 如何修复“错误:监听 EADDRINUSE:地址已在使用 :::5000”未处理的“错误”事件

    我创建了一个nodejs服务器 一个登录应用程序 但是当我尝试节点应用程序时出现错误 她之前不在这里 events js 167 throw er Unhandled error event Error listen EADDRINUSE
  • Maven 故障安全插件失败并显示“无法找到 Surefire-booter”

    截至 8 月 2 日 我们的 Maven 构建在 Jenkins 中突然失败 我们无法解释为什么 Maven 故障安全无法访问其依赖的 booter 插件 有人见过同样的事情吗 INFO failsafe integration test
  • GitHub for Windows/Mac 的“发布”功能是什么?

    Like in GitHub for Windows 的 同步 有什么作用 https stackoverflow com questions 12104513 what does github for windows sync do Gi
  • 如何更改启动的默认 xcode 版本...?

    我的电脑上安装了 xcode 3 2 和 4 0 版本 但我的问题是每当我打开一个项目时 它都会以 xcode 3 2 打开 虽然我可以选择使用 open with gt xcode 4 0 打开我的项目 但我想将默认的 Xcode 更改为
  • h:selectOneMenu 与布尔项不适用于空值

    我正在使用 JSF 2 0 JBoss 7 1 1 Final 并且我在 selectOneMenu 方面遇到以下问题 我希望能够将托管 bean 中的字段设置为 true false null 因此 我创建了以下 selectOneMen
  • 无法使用python在谷歌驱动器上上传大文件

    我正在尝试使用以下代码通过 Google API 将文件上传到 Google 云端硬盘 import httplib2 from apiclient import discovery from httplib2 import Http fr
  • MongoDB 列表 - 获取每第 N 个项目

    我有一个 Mongodb 架构 大致如下 name name1 instances value 1 date ISODate 2015 03 04T00 00 00 000Z value 2 date ISODate 2015 04 01T
  • 定义一个返回结构体指针的函数

    请耐心听我说 我是其他语言的新手 也是 c 语言的新手 正在学习它http c learncodethehardway org book learn c the hard way html http c learncodethehardwa
  • 从 where 子句中给定的集合中选择表中不存在的 ID

    我有一组用户 ID 512 5 13 14 67 和一个包含以下内容的表 Id userID 1 512 2 13 3 14 4 51 5 6 该集中的一些用户 ID 并不存在于表中 例如 用户身份5和用户 ID64不存在 当我执行时Sel
  • 按位 NOT 的奇怪输出

    我试图用 0 的补码得到 1 但我得到 4294967295 这是我所做的 unsigned int x 0 unsigned int y x cout lt lt y 我的输出是 4294967295 但我期望 1 为什么会这样 顺便说一
  • 如何将扫描仪输入放入数组中......例如几个数字

    Scanner scan new Scanner System in double numbers scan nextDouble double avg 你可以尝试这样的事情 public static void main String a
  • VS 2005 C++ 项目中的 msvcr90.dll 依赖项

    我在 VS 2005 中为本机 Win32 非托管 C 创建了一个 DLL 项目 将其命名为 myProj dll 它依赖于第 3 方商业 DLL 而该 DLL 又依赖于 msvcr90 dll 我假设它是从 VS 2008 项目构建的 我
  • 如何在Excel中计算分钟和秒的平均值

    B 列中的原始数据各占一个新行 如下所示 5 04 3 57 0 58 10 01 的左边 是 的分钟和右边 是秒 我需要计算我的数据的平均值 我该怎么办 您需要转换为真实时间 一种选择是使用TIME并解析原始数据 在新列中 使用 TIME
  • 时间 - 获取昨天的日期

    我正在尝试使用 Python 获取今天和昨天的时间time模块 这对我来说适用于今天的日期 dt time strptime time strftime d m Y d m Y 但我不知道如何获得昨天的日期 我发现了很多教程datetime
  • 向空对象添加属性

    我有这个代码 var MY OBJ MY OBJ test function 我正在使用 Vscode 我得到属性测试未定义 我怎么能让这只是一个警告 定义你的对象有一个test财产 var MY OBJ test Function MY
  • 每次服务器重新启动后端口“已在使用”

    寻求有关特殊问题的帮助 每次我停止并重新启动服务器时 我都会收到以下消息 Jim Jim PC MINGW64 nodeProjects express locallibrary tutorial npm start gt email pr
  • React 标签和按钮 onClick 传播

    我想创建一个带有 render 方法的 React 组件 该方法具有 a 如果您愿意的话 可以包裹整个 盒子 的标签 单击后会重定向到另一个页面 在所述盒子内有一个 a