javascript - 如何使用条件停止 useEffect 函数?
问题描述
我正在创建我的投资组合网站,其概念是创建一个人们可以与之交互的立方体。可以通过在立方体/屏幕上单击并拖动鼠标来移动立方体。但是,我希望能够通过使用 useState (true/false) 来“锁定”多维数据集。
从字面上看,如果多维数据集“isLocked”,那么我们不应该能够使用 useEffect 挂钩中的函数。到目前为止,这是我的 Cube 组件的一部分:
export default function Cube(props) {
const [isLocked, setIsLocked] = useState(false);
useEffect(() => {
if (!isLocked) {
rotateCube(document.getElementById("cube"));
} else {
return;
}
}, [isLocked]);
// Rotate function :
function rotateCube(cube) {
var mouseX0 = 0,
mouseY0 = 0,
mouseX1 = 0,
mouseY1 = 0;
cube.onmousedown = dragMouseDown;
function dragMouseDown(e) {
e = e || window.event;
e.preventDefault();
mouseX0 = e.clientX;
mouseY0 = e.clientY;
document.onmouseup = closeDragElement;
...
}
解决方案
可以在dragMouseDown函数中放置检查
export default function Cube(props) {
const [isLocked, setIsLocked] = useState(false);
// executed once on load
useEffect(() => {
rotateCube(document.getElementById("cube"));
}, []);
// Rotate function :
function rotateCube(cube) {
var mouseX0 = 0,
mouseY0 = 0,
mouseX1 = 0,
mouseY1 = 0;
cube.onmousedown = dragMouseDown;
function dragMouseDown(e) {
// here the check
if (isLocked) { return false }
e = e || window.event;
e.preventDefault();
mouseX0 = e.clientX;
mouseY0 = e.clientY;
document.onmouseup = closeDragElement;
...
...
...
}
我想知道你为什么不使用 JSX 来处理事件,例如<Cube onMouseDown={onMouseDown} />
?
推荐阅读
- javascript - 检查多维数组中的偶数
- vue.js - 使用 vuejs 对 js 数据动态应用搜索过滤器
- python - os.walk 但顶部有目录?
- ibm-cloud - Using context variables to write the user's car registration
- karate - Can I run example in scenario outline for n times?
- modelica - 有没有办法将参数传递给可替换/重新声明的组件?
- javascript - 如何从html表格行中获取图像
- android - 如何在 java 中的 LocalSocket 和 c++ 中的 unix 套接字之间进行通信?
- java - 我可以通过 OneToMany 级联关系获取删除的行数吗?
- android - Flutter中的响应式UI