Реакция useRef не определена - PullRequest
       30

Реакция useRef не определена

1 голос
/ 22 октября 2019

Я думаю, что я могу неправильно использовать 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 Ответ

3 голосов
/ 22 октября 2019

В первый раз, когда вы пытаетесь получить доступ к 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)
},[])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...