2016-03-29 99 views
3

我試圖添加反彈與lodash搜索功能,從輸入onChange事件調用。下面的代碼會生成一個類型錯誤「預計的函數」,我知道這是因爲lodash正在等待一個函數。什麼是正確的方式來做到這一點,可以做到所有內聯?迄今爲止,我幾乎所有的例子都嘗試過,但都無濟於事。Lodash反彈與反應輸入

search(e){ 
let str = e.target.value; 
debounce(this.props.relay.setVariables({ query: str }), 500); 
}, 

回答

7

去抖動功能可以內嵌在JSX傳遞或直接設置爲一類方法,如下所示:

search: _.debounce(function(e) { 
    console.log('Debounced Event:', e); 
}, 1000) 

小提琴:https://jsfiddle.net/woodenconsulting/69z2wepo/36453/

如果您使用ES2015 +你可以定義你的防反彈方法在你的constructorcomponentWillMount

實施例:

componentWillMount() { 
    this.search = _.debounce(e => { 
    console.log('Debounced Event:', e); 
    }, 1000); 
} 
+0

感謝您的。我現在看到的是合成事件的控制檯日誌,我需要e.target.value執行搜索。我試過e.persist(),但它似乎沒有做任何事情。 Debouncing在技術上是有效的,但沒有通過它的價值它不起作用。謝謝你的幫助。 –

+0

我完全不能使用它,但它讓我在需要的地方去。我基本上有輸入呼叫搜索(e),然後將該事件傳遞給另一個帶有去抖動功能。我閱讀了event.persist(),但是我無法完成這項工作。謝謝你的幫助!! –

+0

檢查此答案,以及:https://stackoverflow.com/a/28046731/551030 –

1

這不是那麼簡單的問題

一方面只是解決錯誤你得到,你需要在功能包你setVariables

search(e){ 
    let str = e.target.value; 
    _.debounce(() => this.props.relay.setVariables({ query: str }), 500); 
} 

在另一方面,我相信反彈邏輯必須在繼電器內部封裝。