Estoy trabajando en una aplicación de seguimiento de pantalla que toma capturas de pantalla cada 10 minutos y las carga en un almacenamiento de Firebase. Estoy llamando a la función de inicio cuando hago clic en la función de inicio y quiero que deje de capturar la pantalla cuando hago clic en el botón de detener, pero no funciona y no puedo entender por qué. Soy un desarrollador autodidacta con menos de 3 meses de experiencia. Por favor ayuda.
function App() { // store the screenshots in an array const [newScreenshots, setNewScreenshots] = useState(""); // const [screenshots, setScreenshots] = useState([]); const [timeoutId, setTimeoutId] = useState(false); const [progress, setProgress] = useState(0); const uploadFiles = (img) => { // logic const storageRef = ref(storage, `/screenshots/${uuidv4()}`); uploadString(storageRef, img, "data_url").then((snapshot) => { console.log("Uploaded a data_url string!"); }); }; let newTimeoutId; const screenshot = async () => { setTimeoutId(true); const newTimeoutId = setTimeout(async () => { const screenshotData = await ipcRenderer.invoke("capture"); const string = new Buffer.from(screenshotData).toString("base64"); const img = `data:image/png;base64,${string}`; console.log(img); uploadFiles(img); screenshot(); }, 600000); }; // This function is not working. I'm trying to call it using button click. const stopScreenshot = () => { setTimeoutId(false); clearTimeout(newTimeoutId); };Por lo tanto, evitaría usar setTimeout y, en su lugar, usaría setInterval que toma una función y un intervalo de tiempo para activarlo. Además, crearía una función para tomar una captura de pantalla, que solo se ocupa de tomar la captura de pantalla (tal vez quieras tomar una captura de pantalla a pedido algún día, tener la mitad del trabajo hecho sería bueno :))
const takeScreenshot = async () => { const screenshotData = await ipcRenderer.invoke("capture"); const string = new Buffer.from(screenshotData).toString("base64"); const img = `data:image/png;base64,${string}`; uploadFiles(img); screenshot(); } const startRecording = () => { setInterval(() => takeScreenshot() , 60000) } stopRecording = () => {clearInterval(startRecording)}** es posible que deba editarlo un poco