import React, { useCallback, useEffect, useRef, useState } from "react"; import classNames from "classnames"; import { useDrag } from "react-use-gesture"; import { useSpring, useTransition, animated } from "@react-spring/web"; import styles from "./GridDemo.module.css"; let tileIdx = 0; export function GridDemo() { const [stream, setStream] = useState(); const [tiles, setTiles] = useState([]); const startWebcam = useCallback(async () => { const stream = await navigator.mediaDevices.getUserMedia({ video: true }); setStream(stream); setTiles([{ stream, key: tileIdx++ }]); }, []); const addTile = useCallback(() => { const newStream = stream.clone(); setTiles((tiles) => [...tiles, { stream: newStream, key: tileIdx++ }]); }, [stream]); const removeTile = useCallback(() => { setTiles((tiles) => { const newArr = [...tiles]; newArr.pop(); return newArr; }); }, []); useEffect(() => { console.log(tiles); }, [tiles]); const tileTransitions = useTransition(tiles, { from: { opacity: 0, scale: 0.5 }, enter: { opacity: 1, scale: 1 }, leave: { opacity: 0, scale: 0.5 }, }); return (