Javascript 反应:单击html元素时仅执行一次操作
在jQuery中,在Javascript 反应:单击html元素时仅执行一次操作,javascript,reactjs,Javascript,Reactjs,在jQuery中,在html元素上触发事件时,只执行一次操作是非常简单的 例如: $(".dropdown-trigger").on("click", function(event) { var self = this; $("html").one("click", function() { $(self).parents(".dropdown").removeClass("active"); }); $(this).parents(".dropdown").toggle
html
元素上触发事件时,只执行一次操作是非常简单的
例如:
$(".dropdown-trigger").on("click", function(event) {
var self = this;
$("html").one("click", function() {
$(self).parents(".dropdown").removeClass("active");
});
$(this).parents(".dropdown").toggleClass("active");
event.stopPropagation();
});
事实上,这并不容易
如何在单击html元素时在React中执行操作,并且仅执行一次该操作(类似于我的jQuery代码)?翻转状态一旦元素触发其事件,React将重新呈现组件,因为您的状态已更改,并且不会显示该组件。下面是实现这一结果的一个例子
_onEvent() {
this.setState({
hasTriggered: true
})
}
render() {
return (
<div>
{
!this.state.hasTriggered ?
<MyElement onClick={this._onEvent.bind(this)} /> : null
}
</div>
)
}
\u onEvent(){
这是我的国家({
哈斯:是的
})
}
render(){
返回(
{
!this.state.has已触发?
:null
}
)
}
翻转状态一旦元素触发其事件,react将重新呈现组件,因为您的状态已更改,并且不会显示该组件。下面是实现这一结果的一个例子
_onEvent() {
this.setState({
hasTriggered: true
})
}
render() {
return (
<div>
{
!this.state.hasTriggered ?
<MyElement onClick={this._onEvent.bind(this)} /> : null
}
</div>
)
}
\u onEvent(){
这是我的国家({
哈斯:是的
})
}
render(){
返回(
{
!this.state.has已触发?
:null
}
)
}
使用参考文献。虽然不太好看,但至少效果不错。这需要反应>16.8
import React, { useEffect, useRef } from 'react'
const App = () => {
const ref = useRef()
// Wait for DOM to load
useEffect(() => ref.addEventListener('click', () => alert('Hi'), { once: true })
return <button ref={ref}>Click on me (once)</button>
}
import React,{useffect,useRef}来自“React”
常量应用=()=>{
const ref=useRef()
//等待DOM加载
useffect(()=>ref.addEventListener('click',()=>alert('Hi'),{once:true})
返回单击我(一次)
}
使用参考文献。虽然不太好看,但至少它可以工作。这需要React>16.8
import React, { useEffect, useRef } from 'react'
const App = () => {
const ref = useRef()
// Wait for DOM to load
useEffect(() => ref.addEventListener('click', () => alert('Hi'), { once: true })
return <button ref={ref}>Click on me (once)</button>
}
import React,{useffect,useRef}来自“React”
常量应用=()=>{
const ref=useRef()
//等待DOM加载
useffect(()=>ref.addEventListener('click',()=>alert('Hi'),{once:true})
返回单击我(一次)
}
带有useState,也用于React>16.8
import React, { useState } from 'react';
const App = () => {
const [clicked, setClicked] = useState(false);
const myFunc = () => alert('hey');
const onClick = (event) => {
if (!clicked) {
setClicked(true);
myFunc(event);
}
};
return <button onClick={onClick}>Click on me (once)</button>;
};
import React,{useState}来自“React”;
常量应用=()=>{
const[clicked,setClicked]=useState(false);
常量myFunc=()=>警报('hey');
const onClick=(事件)=>{
如果(!单击){
setClicked(true);
myFunc(事件);
}
};
返回点击我(一次);
};
带有useState,也用于React>16.8
import React, { useState } from 'react';
const App = () => {
const [clicked, setClicked] = useState(false);
const myFunc = () => alert('hey');
const onClick = (event) => {
if (!clicked) {
setClicked(true);
myFunc(event);
}
};
return <button onClick={onClick}>Click on me (once)</button>;
};
import React,{useState}来自“React”;
常量应用=()=>{
const[clicked,setClicked]=useState(false);
常量myFunc=()=>警报('hey');
const onClick=(事件)=>{
如果(!单击){
setClicked(true);
myFunc(事件);
}
};
返回点击我(一次);
};
可能重复的@JCOC611请再次阅读该问题;OP询问如何设置一个处理程序,该处理程序在被触发一次后自动解除绑定。OP,您可以使用状态标志执行此操作,但您的jQuery示例代码表明这是一个XY问题。我决不会使用.one
来执行清除下拉列表之类的操作。@Mathletics谢谢。可以吗你给我举个例子?我很乐意回答你。同样,这是。请告诉我们你试图解决的问题和你想要实现的目标。你问的是如何实现一个特定的(我可能是无效的)解决方案。@JCOC611的可能副本请再次阅读该问题;OP询问如何设置一个处理程序,该处理程序在被触发一次后自动解除绑定。OP,您可以使用状态标志执行此操作,但您的jQuery示例代码表明这是一个XY问题。我决不会使用.one
来执行清除下拉列表之类的操作。@Mathletics谢谢。C你能给我举个例子吗?我很乐意给你一个答案。同样,这是。请告诉我们你想解决什么问题以及你想实现什么。你问的是如何实施一个特定的解决方案(在我看来可能是无效的)。这对我帮助很大!谢谢你救了我一天!:)这对我帮助很大!谢谢你救了我一天!:)