我使用的是位于HelloWorld.js
文件中的一个名为HelloWorld
的功能组件。假设我想在不再次触发渲染的情况下跟踪鼠标位置。
作为一个初学者,我知道两个选项:
let mousePosition = null;
const HelloWorld = () => {
// ...
mousePosition = aNewPosition;
const handlerReadingPosition = () => {
console.log(mousePosition)
}
}
和
const HelloWorld = () => {
const mousePositionRef = useRef(null);
// ...
mousePositionRef.current = aNewPosition;
const handlerReadingPosition = () => {
console.log(mousePositionRef.current)
}
}
这两组代码等价吗?如果我在HelloWorld中声明一个变量,它将在每次渲染时被擦除,因此useRef
。
有没有";规则";在HelloWorld
内部而不是之前声明变量?
您可以将ref
视为类的实例变量。
当渲染组件的多个实例时,全局方法将中断。
例如:我有一个输入字段。所以最初输入标签是空的。在我的javascript文件中,有一个变量被声明为userName
。使用向上键函数,我从每个键笔划的输入字段中获取值,并将其分配给变量。
现在有另一个函数由于其他原因使用了我的名字。现在,由于我的userName
是全局声明的,我可以在任何地方使用它。
var userName //This is the global variable
$('#userNameDiv').on('keyup',function(){ //Jquery method
userName = $('#userName').val() //The variable is referenced here
let temp_userName = $('#userName').val() //Local variable as it is defined within a block and has let key word
})
function(){
console.log(userName) //Since userName is globally declared it will be console logged.
console.log(temp_userName) //will be undefined as it is a local variable
}