Я использую реагирование для создания внешнего интерфейса, который должен использовать мою веб-камеру. Мне нужно иметь возможность нажать и удерживать кнопку и повторно вызывать функцию, которая будет захватывать кадр с камеры.
import React,{useState,useRef,useEffect} from "react"
export function VideoFeed(){
const[constraints] = useState({width:300,height:300})
const longPress = useLongPress(takePhoto)
let video = useRef(null)
useEffect(()=>{
navigator.mediaDevices.getUserMedia({video:true})
.then(stream=>{
let vid = video.current
vid.srcObject = stream;
vid.play();
})
.catch(e=>{
console.log(e)
})
},[video])
function takePhoto() {
console.log("hey")
}
return(
<div>
<video autoPlay ={true} ref ={video} width={constraints.width}
height={constraints.height}>
</video>
<button {...longPress}>Snap Photo</button>
</div>
)
}
export function useLongPress(callback=()=>{}) {
const [startLogPress, setStartLongPress] = useState(false);
useEffect(() => {
let timerId;
if (startLogPress) {
timerId = setTimeout(callback, 0);
} else {
clearTimeout(timerId);
}
return () => {
clearTimeout(timerId);
};
}, [startLogPress]);
return {
onMouseDown: () => setStartLongPress(true),
onMouseUp: () => setStartLongPress(false),
onMouseLeave: () => setStartLongPress(false),
onTouchStart: () => setStartLongPress(true),
onTouchEnd: () => setStartLongPress(false),
};
}
Я использую крючки и не могу понять, как зациклить функцию. Если я добавляю цикл while в хук useEffect, приложение разрывается. Одиночные клики работают, но нажатие и удержание не