React

리액트에서 useRef를 통해 참조되는 HTML canvas element의 매개변수를 저장하는 가장 좋은 방법은 무엇인가

Asset Type
File Type
When to use
Reference
Created by
Created time
2022/03/13 14:49
Last edited time
2022/03/13 15:53
useEffect()의 종속성 배열에 canvas.current를 넣으면 안티패턴이며 이에 대한 경고가 표시됩니다.
'canvas.current'와 같은 mutable value는 valid dependencies가 아니다. mutating은 컴포넌트를 리렌더링하지 않기 때문이다.
Vitali Zaidman의 이 기사에서 지적했듯이, "component가 useRef를 사용하여 'ref.current'에 마운트(해제)되었다가 연결된 경우 콜백 또는 렌더러가 없습니다."
당신이 사용하고 싶은 것은 사실 callback()를 사용하는 것입니다.
useCallback()을 통해 최신 캔버스 DOM reference가 반환되면 centerX 및 centerY를 설정하여 대응할 수 있습니다. 제안하신 대로 useState()를 사용하여 이러한 변수를 state로 추적할 수 있습니다.
const [centerX, setCenterX] = useState(null); const [centerY, setCenterY] = useState(null); const canvasRef = useCallback((canvasNode) => { setCenterX(canvasNode.width / 2); setCenterY(canvasNode.height / 2); }, []); ... return (<canvas ref={canvasRef} />);
TypeScript
복사