Este é o meu código
import { useEffect, useRef, useState } from "react";
import PostContainer from "./postContainer.jsx"
export function App(props) {
const postContainerRef=useRef()
useEffect(()=>{
console.log(postContainerRef.current)
},[postContainerRef])
return (
<div className='App'>
<h1>Hello React.</h1>
<PostContainer
ref={postContainerRef}
some_prop={"meow"} />
</div>
);
}
aqui eu quero usar postContainerRef
uma vez definido, mas é apenas um registro indefinido. Tentei usar [postContainerRef.current]
como matriz de dependência, mas também não fez nada.
import { useState, useEffect, useRef, forwardRef } from "react";
const PostContainer = forwardRef((props, ref) => {
useEffect(()=>{
console.log(ref.current)
},[ref])
return <>
<div>This is Container</div>
</>
})
export default PostContainer
Também quero acessar o elemento Container depois de renderizado, mas ele também está registrando indefinido.
O problema que você está enfrentando está relacionado a como
useRef
trabalharforwardRef
em conjunto com ouseEffect
. Aqui estão os pontos principais a serem abordados:1 - O
useRef
objeto (postContainerRef
) não aciona novas renderizações quando suacurrent
propriedade é atualizada. Portanto, não funcionará como uma dependência nouseEffect
.2 - Ao usar forwardRef, você deve passar o ref para o elemento DOM real que deseja referenciar. Aqui está uma versão revisada do seu código para garantir que a referência esteja definida corretamente e possa ser usada em useEffect:
Componente do aplicativo
Componente PostContainer
Explicação
Componente 1-aplicativo:
useRef(null)
é usado para criar um objeto ref.useEffect
é executado uma vez após a renderização inicial. Como a referência será atribuída até então, você poderá acessar com segurançapostContainerRef
. corrente dentro deste efeito.Componente 2-PostContainer:
forwardRef
é usado para passarref
para o elemento DOM real (div
neste caso).useEffect
é usado para registrarref.current
após a montagem do componente. Aqui,ref
é transmitido do componente pai eref
é atribuído aodiv
elemento.Dessa forma, o
ref
é atribuído corretamente ao elemento DOM e você pode usá-lo em seususeEffect
ganchos tanto nos componentes pai quanto nos filhos.