inflearn logo
강의

Course

Instructor

Bite-Sized React (React.js): From Basics to Practice

5.10) Creating Component Variables with useRef

2:40초 refObj를 콘솔로 출력시 오류가 발생합니다.

108

rumi du

22 asked

0

// 간단한 회원가입 폼 
// 1. 이름 
// 2. 생년월일 
// 3. 국적 
// 4. 자기소개 

import { useState , useRef} from "react";

const Register = () =>{

    const [input, setInput] = useState({
        name : "",
        birth : "",
        country : "",
        bio : "" 
    });

    const refObj = useRef();
    console.log(refObj);

    const onChange = (e) =>{
        setInput({
            ...input,
            [e.target.name] : e.target.value
        })
    };


    return (
        <div>
            <div>
                 <input name = "name" value={input.name} onChange={onChange} placeholder={"이름"}></input>
            </div>
            <div>
                <input name = "birth"  type="date" value={input.birth} onChange={onChange} placeholder={"생년월일"}></input>
            </div>
            <div>
                <select name = "country"  value={input.country} onChange={onChange}>
                    <option>한국</option>
                    <option>미국</option>
                    <option>영국</option>
                </select>
            </div>
            <div>
                <textarea  name = "bio" value={input.bio} onChange={onChange}/>
            </div>
        </div>
    ); 
    
};

export default Register;

 

 

=> 오류 발생

 

@workspace /explain Error: Cannot access refs during render

React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the current property) during render can cause your component not to update as expected (https://react.dev/reference/react/useRef).

17 |

18 | const refObj = useRef();

> 19 | console.log(refObj);

| ^^^^^^ Passing a ref to a function may read its value during render

20 |

21 | const onChange = (e) =>{

22 | setInput({

 

 

🚨 필독) 질문하시기 전에 꼭 읽어주세요 (10초 소요)

javascript react node.js

Answer 2

0

winterlood

안녕하세요 rumi du님 이정환입니다.

결론부터 말씀드리면, 강의 코드가 틀린 건 아닙니다!
console.log(refObj)는 실제로 오류를 발생시키지 않습니다.

올려주신 에러 메세지를 보면, @workspace/explain 이라는 접두사와 함께 시작하는데요, 이처럼 @workspace/explain으로 시작하는 에러메세지는 VSCode의 코파일럿의 설명으로 실제 프로젝트 동작에는 아무런 영향을 주지 않습니다.

아래와 같이 코파일럿을 사용하지 않는 환경에서의 제 코드는 아무런 오류도 발생하지 않는걸 보실 수 있습니다 😀

image.png

그렇다면 Copilot이 이런 메세지를 왜 보여주냐! 이는 잠재적으로 문제가 될 수 있는 코드이기 때문입니다. 렌더링 중에 ref를 함수에 전달하면 그 함수가 ref의 값을 읽을 수도 있기 때문에, Copilot이 "혹시 이거 의도한 거 맞아?" 하고 알려주는 거죠.

그런데 우리는 refObj를 콘솔에서 학습 목적으로 까보려는 것이기 때문에, 이런 경고는 무시해도 됩니다. 실제로 프로젝트를 실행해보시면 정상적으로 동작하는 걸 확인하실 수 있을 거예요!

 

1

rumi du

그렇군요 빠른 답변 주셔서 감사합니다 ~

-1

Codingbear

useRef() 훅을 사용했다면 해당 변수의 현재 값에 접근하려면 refObj.current 로 참조해야 합니다.

그리고 현재 const refObj = useRef() 는 초기값을 지정하거나 ref 속성으로 연결한 것이 보이지 않습니다.

0

rumi du

그러면 강사님 코드가 틀린건가요? 저는 강사님 코드 그래도 작성한건데요

프론트엔드 학습 수준 문의

0

8

1

리액트 챕터별 코드에서 eslint 설정파일이 없어요

0

34

2

데이터 로딩중 화면만 계속 나와요!!

0

47

2

퍼블리셔일경우 어느정도 수준까지 강의를 들어야할까요

0

70

2

이후의 커리큘럼 문의

0

97

2

실슬환경 설정에서 save후 console.log 부분이 새로고침이 안되는현상입니다.

0

45

2

최적화 관련 질문있습니다 (useMemo 등)

0

81

3

프로바이더 컴포넌트의 위치는 어떤 기준인가요?

1

77

3

Date 객체에 관련하여 질문드립니다.

0

80

2

리액트 개정판 교재 질문

0

56

2

예제코드가 안나와요!

0

72

2

select a variant 선택에서 javascript와 javascript+react compiler 중 무엇을 선택해야하나요? com

0

101

2

onMouseEnter 관련 문의 드립니다

0

87

3

배열의 렌더링 관련 질문 드립니다.

0

69

2

TS, 리액트 강의중에 뭘 먼저 수강하는게 좋을까요?

0

130

2

useCallback 적용한 onCreate, onUpdate, onDelete 함수..

0

65

1

vs code 자동완성관련 문의

0

102

2

91강 useEffect내에서 상태변화함수 호출시 발생하는 에러

1

173

2

87강 필터 함수 질문

0

63

2

useRef, useState count 비교

0

62

2

안된다고했던 이유가 무엇이었는지 모르겠습니다

0

84

2

85강에서 객체를 왜 클래스로 만들어서 new 하지 않는건지 궁금합니다.

0

72

2

투두리스트 실습을 충실히 진행한 상태에서 감정일기장 실습을 따라할 필요가 있을까요?

0

53

2

83강 css 질문입니다

0

51

2