react useRef 未定义

IT技术 reactjs react-hooks
2021-05-02 10:10:04

我想我可能在useRef这里滥用了。当我尝试画到画布上,我得到以下错误:cannot set 'fillStyle' of undefined

import React, { useEffect, useRef } from "react";
import useWindowSize from "../hooks/useWindowSize";

export default function Player() {
  const canvasRef = useRef();
  const ctx = useRef();

  useEffect(() => {
    ctx.current = canvasRef.current.getContext("2d");
  }, []);
  ctx.current.fillStyle = "green";
  ctx.current.fillRect(20, 20, 150, 100);
  return (
    <React.Fragment>
      <div>Hello</div>
      <canvas ref={canvasRef} width="500" height="500" />
    </React.Fragment>
  );
}

1个回答

第一次尝试访问时ctx.current,它仍然未定义,因为此效果中的赋值仍未发生:

useEffect(()=>{
    ctx.current = canvasRef.current.getContext('2d')
},[])

这是因为效果是渲染阶段之后运行的。

您需要在内部执行此操作useEffect

useEffect(()=>{
    ctx.current = canvasRef.current.getContext('2d')
    ctx.current.fillStyle= "green"
    ctx.current.fillRect(20,20,150,100)
},[])