728x90
21/11/27 TIL
onClick event 무한 렌더링. (Room > serchbox.index.js)
아래 코드는 무한 렌더링 된다.
const clickTag = useCallback( async (tag) =>{
setSearchKeyword(tag);
...
// 함수의 결과값
<div onClick = {clickTag(tag)} >
렌더링시 onClick(clickTag(tag))의 함수가 실행되며 clickTag(tag)의 결과값을 받아오는 과정에서 setSearchKeyword(tag) 코드에 의해 state의 변화가 생기고 이 상태변화는 렌더링을 초래한다. 즉
렌더링 -> 함수실행 -> state 변화 -> 렌더링 -> 함수실행 -> state 변화 -> 렌더링 -> 함수실행 -> state 변화 ->....
무한 반복 !
그래서 함수 객체형태를 나타내는 arrow function 형태나 함수명 뒤 ()를 없애면 된다. ex) onClick(clickTag)
하지만 여기선 인자값 tag를 전달해야 하므로 arrow function form인 onClick(()=>clickTag(tag))가 적절하다.
const clickTag = useCallback( async (tag) =>{
setSearchKeyword(tag);
...
// 객체 형태로 함수 전달
onClick ={()=>clickTag(tag)}
728x90
'프로그래밍 > Javascript & React' 카테고리의 다른 글
[Javascript] Javascript 특징 및 웹 워커(멀티 스레드) (0) | 2022.01.14 |
---|---|
[Javascript] 렉시컬 스코프(Lexical Scope), 스코프 체인(Scope Chain), 클로저(Closure) (0) | 2022.01.13 |
[React] z-index, 그의 정체는?!? (0) | 2021.11.12 |
[React] SPA와 React-Redux (0) | 2021.11.11 |
[React] 21/11/07 TIL (0) | 2021.11.05 |
댓글