为什么我的 createdElement 在 reactjs useEffect() 中翻倍?
Why my createdElement is doubling in reactjs useEffect()?
所以我这里的问题很简单,但你不必只了解 useEffect() 部分就可以了解其他代码..
当我试图悬停 text
时,我的自定义鼠标光标文本加倍
这是代码行。
const cursorIntro = document.querySelector(".cursor");
const options = document.querySelector(".introduction .nav-options");
options.addEventListener("mousemove", function s(e) {
var rect = options.getBoundingClientRect();
var x = e.clientX - rect.left; //x position within the element.
var y = e.clientY - rect.top;
cursorIntro.style.left = x + "px";
cursorIntro.style.top = y + "px";
});
function OnSelect() {
const optionsSelection = document.querySelectorAll(".options");
optionsSelection.forEach((elem, i) => {
// console.log(elem.children[1].children[0].children[0])
elem.children[1].children[0].children[0].addEventListener(
"mouseleave",
() => {
cursorIntro.removeChild(cursorIntro.lastChild);
// cursorIntro.innerHTML = ""
}
);
elem.children[1].children[0].children[0].addEventListener(
"mouseenter",
() => {
// elem.children[1].children[0].children[0].classList.add('')
const createElement = document.createElement("h4");
createElement.innerText =
elem.children[1].children[0].children[0].dataset.name;
cursorIntro.appendChild(createElement);
}
);
});
}
OnSelect();
如您所见,我上面有一个自定义鼠标光标,因为当它悬停在 text
元素上时,我想在该位置附加文本。
当我调用它时,它在 useEffect() 内部...但我不确定的是我只在每个 addEventListener
回调一次。
我使用 createElement
的原因是因为如果我使用 innerHTML 而不使用 createElement
我不能再添加一些项目因为我的计划是在 mousecursor
中添加更多的东西
这是 CODEPEN
转到 index.js 并将 StrictMode 替换为 React.Fragment,在开发模式下反应 re-renders 两次
所以我这里的问题很简单,但你不必只了解 useEffect() 部分就可以了解其他代码..
当我试图悬停 text
这是代码行。
const cursorIntro = document.querySelector(".cursor");
const options = document.querySelector(".introduction .nav-options");
options.addEventListener("mousemove", function s(e) {
var rect = options.getBoundingClientRect();
var x = e.clientX - rect.left; //x position within the element.
var y = e.clientY - rect.top;
cursorIntro.style.left = x + "px";
cursorIntro.style.top = y + "px";
});
function OnSelect() {
const optionsSelection = document.querySelectorAll(".options");
optionsSelection.forEach((elem, i) => {
// console.log(elem.children[1].children[0].children[0])
elem.children[1].children[0].children[0].addEventListener(
"mouseleave",
() => {
cursorIntro.removeChild(cursorIntro.lastChild);
// cursorIntro.innerHTML = ""
}
);
elem.children[1].children[0].children[0].addEventListener(
"mouseenter",
() => {
// elem.children[1].children[0].children[0].classList.add('')
const createElement = document.createElement("h4");
createElement.innerText =
elem.children[1].children[0].children[0].dataset.name;
cursorIntro.appendChild(createElement);
}
);
});
}
OnSelect();
如您所见,我上面有一个自定义鼠标光标,因为当它悬停在 text
元素上时,我想在该位置附加文本。
当我调用它时,它在 useEffect() 内部...但我不确定的是我只在每个 addEventListener
回调一次。
我使用 createElement
的原因是因为如果我使用 innerHTML 而不使用 createElement
我不能再添加一些项目因为我的计划是在 mousecursor
中添加更多的东西
这是 CODEPEN
转到 index.js 并将 StrictMode 替换为 React.Fragment,在开发模式下反应 re-renders 两次