import React, { useState, useCallback, useEffect} from "react";
const App=()=>{
const [count,setCount]=useState(0);
const countUp=()=>{
setCount(count=>count+1);
}
const countDown=()=>{
setCount(count=>count-1);
}
return(
<div>
<p>count:{count}</p>
<AppTwo countUp={countUp} countDown={countDown}/>
</div>
)
}
const AppTwo=({countUp, countDown})=>{
useEffect(()=>{console.log('re-rendering.')}) //check re-rendering
return(
<div>
<button onClick={countUp}>count Up</button>
<button onClick={countDown}>count Down</button>
</div>
)
}
export default App;
이 코드에서 AppTwo 컴포넌트는 App컴포넌트로부터 prop을 받고있는데요, prop을 받고있는 자식컴포넌트가 리렌더링되려면, 해당 prop의 변화를 감지해야 하잖아요? 여기서 App컴포넌트가 리렌더링되면, prop으로 받는 두 함수가 참조하는 메모리 주소는 같지만, 단지 새롭게 생성되었단 이유만으로 AppTwo컴포넌트도 리렌더링 되고 있는건가요? 아! 만약 함수가 새롭게 생성되면 참조하고 있는 메모리 주소는 같아도, 메모리속의 로직은 새롭게 생성되는 건가요?
해당 댓글은 삭제되었습니다.
헐 제가 완전히 잘못알고 있었네요 ㅠㅠ 그럼 함수가 새로 생성되면 메모리주소와 메모리속 로직도 새롭게 생성되는거지용? 그럼 useCallback을 사용하면 의존성배열요소가 변하지 않으면, 같은 메모리주소를 갖고, 메모리속 로직도 새롭게 생성되는걸 막나요??
감사합니다 번역기 돌려가면서 해야겠어요 ㅠ
질문이 존나난잡하네 모르는게뭔데
죄송합니다 chatGPT 이새기한테 질문하면서 배워왔어요...
컴포넌트속 함수는 해당컴포넌트가 리렌더링되면 해당 메모리주소가 변경된다는데, 메모리속 로직도 새롭게 생성되는건가요??
재렌더링되면서 해당 컴포넌트의 코드가 실행하고 그러면서 countUp countDown에 새로 생성된 람다함수의 메모리 주소가 들어가게 됨. 로직은 당연히 동일하겠지
메모리에는 갑 밖에 안들어가는데 메모리속 로직은 무슨 말이야 제대로 알지 못하는 단어나 표현은 쓰지말고 그냥 담백하게 표현해
useCallback은 갑자기 왜나오지 리렌더링은 그냥 state안의 값이 변경 되면 일어나는 거임 그리고 prop으로 받는 두 함수가 아니라 변수나 매개 변수라고 표현을 해, 질문을 하고 원하는 답을 얻으려면 정확한 단어를 쓰셈 상위 컴포넌트인 App의 state인 count의 변경을 감지해서 App이 리렌더링 된 후에 AppTwo가 리렌더링 되는거뿐이야. AppTwo는 prop이 변경된걸 몰라. 질문 몇번 읽다가 뭔 말하는건지를 모르겠네 단어를 좀 제대로 배우셈
죄송합니다 gpt가 알려준대로 하다보니..ㅜㅠ 선생님 이런 기본적인거는 자바스크립트 공홈에서 공부하는게 최선인가요??ㅠ
자바스크립트 deep dive 사서 읽어, 매개변수 전달인자 변수 상수 스코프 메모리 객체 함수 이런 기본 용어들 차이를 잘 알아야함 그게 뭔 상관이냐 할수있겠지만 챗gpt한테 물어보든 여기서 물어보든 단어를 제대로 모르면 의사소통이 안돼
퇴근하면서 도서관에서 말씀해주신책 대출받고 가고잇습니다 열심히 공부할게요 감사합니다!!
1. 일단 부모 컴포넌트인 App 컴포넌트에서 생성된 countUp, countDown이라는 함수를 자식 컴포넌트에게 props로 전달함. 2. 부모 컴포넌트가 리렌더링이 되면서 countUp, countDown이라는 함수를 새로 생성함(새로운 메모리 주소값으로 생성) 3. 자식 컴포넌트는 이전에 받은 countUP, countDown의 주소 값과 새롭게 리렌더링해서 받은 countUP, countDown 함수의 주소 값을 비교함 4. 당연히 새로 생성된 함수이므로 메모리 주소 값이 달라 props가 변경됐다고 판단하여 자식 컴포넌트인 AppTwo 컴포넌트를 리렌더링함. 이때 자식 컴포넌트인 AppTwo 컴포넌트의 불필요한 리렌더링을 방지하기 위해서는 부모 컴포넌트에서 useCallback을 사용할 수 있음