2016-12-18 2 views
5

나는 React Native와 lodash의 디 바운싱을 가지고 놀고 있습니다.React Native : lodash 디 바운스 사용

다음 코드를 사용하면 디버빙이 아니라 지연처럼 작동합니다.

"foo"와 같은 입력을 입력하면 콘솔에 debounce를 한 번만 기록합니다. 지금은 "debounce"를 3 번 ​​기록합니다.

+0

'onChangeText'은 푸 디 바운스 기능은 3 회를 호출 할 것이다 입력, 당신은 입력을 변경할 때마다 호출, 그래서 행동이 올바른 것입니다. – jmac

+0

@jmac 나는 결점이 항상 내게있다라고 확신한다. 그러나 그것이 원하는 것은 어떻게 보관하고 싶은가? 한 번만 발사해서 다시 발사 할 수있다. – Norfeldt

+2

_.debounce는 새로운 기능을 생성한다. 콜백이지만 추가 기능으로 포장하고 변경이 발생할 때마다 수동으로 디버깅 된 함수의 새 인스턴스를 호출합니다. 이 여분의 래퍼를 제거해야합니다 :'onChangeText = {_. debounce ((text) => console.log ('debouncing', text), 2000)}'. 인수에 대해 걱정하지 마십시오. 인수를 처리기로 전달합니다. –

답변

26

디버깅 기능은 렌더 메소드 외부에서 정의해야합니다. 사용자가 onChangeText 핸들러에 넣을 때와 같이 새로운 인스턴스를 생성하는 것과 반대되는 방식으로 함수의 동일한 인스턴스를 참조해야하기 때문입니다. 기능.

debounce 기능을 정의하는 가장 일반적인 장소는 구성 요소의 개체입니다. 다음은 예입니다 :

class MyComponent extends React.Component { 
    constructor() { 
    this.onChangeTextDelayed = _.debounce(this.onChangeText, 2000); 
    } 

    onChangeText(text) { 
    console.log("debouncing"); 
    } 

    render() { 
    return <Input onChangeText={this.onChangeTextDelayed} /> 
    } 
} 
+0

나는 이것을 오랫동안 해보려고 애쓰면서 진담했다. 당신의 마음을 축복하십시오. –

+1

@SkipSuva 도움이 되니 기쁩니다! –

+0

감사합니다. @GeorgeBorunov –

관련 문제