Javascript 反应太多,重新渲染无限循环

Javascript 反应太多,重新渲染无限循环,javascript,reactjs,Javascript,Reactjs,我不知道为什么会出现这个错误,我只是想做一个按钮,在悬停时反转颜色,如果你有解决方案或更好的方法,请让我知道 import React,{useState}来自“React” 函数登录(){ 常量[bttnColor,setbtncolor]=useState('white') const[textColor,setTextColor]=useState('black') 函数colorChange1(){ setBttnColor(“黑色”) setTextColor('白色') } 函数c

我不知道为什么会出现这个错误,我只是想做一个按钮,在悬停时反转颜色,如果你有解决方案或更好的方法,请让我知道

import React,{useState}来自“React”
函数登录(){
常量[bttnColor,setbtncolor]=useState('white')
const[textColor,setTextColor]=useState('black')
函数colorChange1(){
setBttnColor(“黑色”)
setTextColor('白色')
}
函数colorChange2(){
setBttnColor(“白色”)
setTextColor('黑色')
}
返回(
登录
登录:
)
}

导出默认登录名
声明属性时,{}内部的结果将发送到组件

这将把colorChange1()的结果发送到组件,而不是函数本身

onMouseEnter={colorChange1()} 
在您的用例中,这是不需要的行为,但请记住,这是一个属性,就像样式或类名一样

您需要向它传递一个函数引用,而不是函数的结果。您可以通过两种不同的方式实现这一点:

onMouseEnter={colorChange1}
onMouseEnter={(event) => colorChange1(event, otherVariables...)}
第一种方法是对现有函数的函数引用。当您不需要向函数传递任何其他信息时,请使用此选项

第二种方法是用lambda包装函数调用。这将允许您从当前作用域中获取变量,并在方法运行时将它们传递到方法中

编辑:

再想一想,这样做会让事情变得比需要的复杂得多。这可以通过几行CSS来完成

让我们删除这些颜色更改方法和onMouseEnter和onMouseLeave调用,并为按钮提供一个类名,以便我们可以在CSS中引用它

    <button className="login-button">Login</button>:

最后,让我们导入css文件:

import "./Login.css";

当声明属性时,{}内部的结果被发送到组件

这将把colorChange1()的结果发送到组件,而不是函数本身

onMouseEnter={colorChange1()} 
在您的用例中,这是不需要的行为,但请记住,这是一个属性,就像样式或类名一样

您需要向它传递一个函数引用,而不是函数的结果。您可以通过两种不同的方式实现这一点:

onMouseEnter={colorChange1}
onMouseEnter={(event) => colorChange1(event, otherVariables...)}
第一种方法是对现有函数的函数引用。当您不需要向函数传递任何其他信息时,请使用此选项

第二种方法是用lambda包装函数调用。这将允许您从当前作用域中获取变量,并在方法运行时将它们传递到方法中

编辑:

再想一想,这样做会让事情变得比需要的复杂得多。这可以通过几行CSS来完成

让我们删除这些颜色更改方法和onMouseEnter和onMouseLeave调用,并为按钮提供一个类名,以便我们可以在CSS中引用它

    <button className="login-button">Login</button>:

最后,让我们导入css文件:

import "./Login.css";

对于事件处理程序,应该只传递函数本身,而不是像现在这样传递函数调用。如果这样做,它将在渲染时被调用,而不是在触发事件时被调用。因此,将以下内容更改为:
onmouseinter={colorChange1()}
为什么不使用CSS?对于事件处理程序,您应该只传递函数本身,而不是像现在这样传递函数调用。如果这样做,它将在渲染时被调用,而不是在触发事件时被调用。因此,请将以下内容更改为:
onmouseinter={colorChange1()}
:为什么不直接使用CSS?另一个注意事项是:您可能希望在CSS中完成这一切,您正在使其变得比需要的复杂得多。创建一个css文件并在文件顶部导入,然后向按钮添加一个类名
className=“bob”
然后在css文件中,设置初始颜色,然后设置:hover colors
。bob{color:white;background color:black;}。bob:hover{color:black;background color:white;}
也许可以将此添加到您的答案中,作为另一种首选的格式化方法。另一个注意事项是:您可能希望在CSS中完成这一切,您使其变得比需要的复杂得多。创建一个css文件并在文件顶部导入,然后向按钮添加一个类名
className=“bob”
然后在css文件中,设置初始颜色,然后设置:hover colors
。bob{color:white;background color:black;}。bob:hover{color:black;background color:white;}
也许可以将此作为格式化lol的备选首选方法添加到您的答案中