onScroll event에 throttle을 적용하는 방법 #630
-
pagination을 구현한 후, 스크롤 이벤트에 throttle을 적용하기 위해 코드를 다음과 같이 작성해봤는데 스크롤 이벤트 자체가 동작하지 않는데 이유를 모르겠습니다. lodash throttle 함수의 작동방식에 대해 조언을 구하고 싶습니다. <div className='comments'
ref={scrollRef}
onScroll={() => throttle(handleScroll, 200)}>
{ comments.map((comment) => (
<Comment
key={comment.id}
comment={comment}
/>
))}
</div> const handleScroll = () => {
if (scrollRef.current.scrollHeight - scrollRef.current.scrollTop - scrollRef.current.clientHeight < 10)
paginateComments(localStorage.getItem('token'));
console.log("event"); //이벤트 호출횟수 확인용
} |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
이래서 타입스크립트를 권장드립니다 ㅎ lodash 오픈소스 뜯어볼게요 (커밋
DebouncedFunc 는 여기 있는데, 실행할 수 있는 함수에 뭐 좀 더해서 돌려줍니다. 또한 ThrottleSettings는 여기 있네요 type lodash = (func: (...args: any) => any, wait?: number, options?: ThrottleSettings) => DebouncedFunc<T> 그래서 이 친구의 사용법이 보통 어떠냐면 const sayHello = () => {
console.log('Hello World!');
}
const throttledHello = throttle(sayHello, 1000);
return <button onClick={throttledHello}>클릭</button> 위 코드를 보면 버튼을 클릭할 때마다 따라서 실행 결과 버튼을 아무리 클릭해도 @HyeongtaekOh 님 코드를 보면 하지만 그 함수를 실행한 적이 없으니 첨언드리자면, "그럼 이걸 실행하면 되겠구나!" 라는 아이디어로 아무튼 답변이 되셨을까요? |
Beta Was this translation helpful? Give feedback.
이래서 타입스크립트를 권장드립니다 ㅎ
lodash 오픈소스 뜯어볼게요 (커밋
7b62f878cc218c8e94e6efafa55cea6796b501f7
기준)lodash
의throttle
함수는 세 가지 인자를 받아서 함수를 리턴합니다. 타입스크립트 식으로 쓰면 다음과 같습니다. (소스)DebouncedFunc 는 여기 있는데, 실행할 수 있는 함수에 뭐 좀 더해서 돌려줍니다. 또한 ThrottleSettings는 여기 있네요
그래서 이 친구의 사용법이 보통 어떠냐면
위 코드를 보면 버튼을 클릭할 때마다
throttledHello
함수가 실행됩니다. throttledHello는throttle
이 반환한 특이한 함수를 가리키는데, 1000ms 동안은 콜백으로 받은 첫 번째 함수 (이 경우sayHello
) 를 한 번씩만 실행하는 함수입니다.따라서 실행 결과…