찾다

 >  Q&A  >  본문

재렌더링 및 useEffect() 호출의 순서

구성요소가 있습니다 TopPageImagePreviewFileUploader

  1. 먼저 표시 FileUploader,

  2. FileUploader는 TopPage의 fileObj 상태를 변경합니다.

  3. 그러면 FileUploader가 사라지고 ImagePreview가 나타나고 동시에 useEffect()가 호출되는데 이때는 ImagePreviewRef가 없습니다.

useState가 호출되면 컴포넌트 재렌더링과 useEffect가 모두 호출됩니다.

명령은 useEffect -> re-render 인가요?

그렇다면 이 문제를 어떻게 해결할 수 있나요?

으아아아

임시 해결책,

지금까지는 이게 맘에 들었는데, ImagePreviewImagePreviewFileUploader 렌더링 구성 요소는 처음부터 display:none로 전환됩니다.

조금 어색해 보이지만...지금까지는 훌륭하게 작동합니다.

const TopPage = (props) =>{
    const [fileObj, setFileObj ] = useState();
    const imagePreviewRef = useRef();
    useEffect(() =>{
        console.log("useEffect() is called with fileObj:",fileObj);
        console.log("imagePrevireRef.current is ready?",imagePreviewRef.current);
        imagePreviewRef.current.loadPic(fileObj);
    },[fileObj]);

    if (fileObj){
      return <ImagePreview ref={imagePreviewRef}></ImagePreview>
    }
    else {
      return <FileUploader SetFileObj=setFileObj></FileUploader>
    }
}

const FileUploader = (props) => {
   // props.setFileObj() is called here.
}
const ImagePreview = (props) => {
   const loadPic = () =>{// loadpicture to canvas }   
}

P粉722409996P粉722409996253일 전416

모든 응답(1)나는 대답할 것이다

  • P粉165522886

    P粉1655228862024-03-23 00:36:53

    균일하게 렌더링한 다음 CSS를 사용하여 조건부로 구성 요소를 표시하여 참조를 보존합니다.

    으아악

    회신하다
    0
  • 취소회신하다