代码之家  ›  专栏  ›  技术社区  ›  James

react useref未定义

  •  1
  • James  · 技术社区  · 5 年前

    我想我可能误用了 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 回复  |  直到 5 年前
        1
  •  3
  •   Hamza El Aoutar    5 年前

    第一次尝试访问 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)
    },[])