我試圖添加反彈與lodash搜索功能,從輸入onChange事件調用。下面的代碼會生成一個類型錯誤「預計的函數」,我知道這是因爲lodash正在等待一個函數。什麼是正確的方式來做到這一點,可以做到所有內聯?迄今爲止,我幾乎所有的例子都嘗試過,但都無濟於事。Lodash反彈與反應輸入
search(e){
let str = e.target.value;
debounce(this.props.relay.setVariables({ query: str }), 500);
},
我試圖添加反彈與lodash搜索功能,從輸入onChange事件調用。下面的代碼會生成一個類型錯誤「預計的函數」,我知道這是因爲lodash正在等待一個函數。什麼是正確的方式來做到這一點,可以做到所有內聯?迄今爲止,我幾乎所有的例子都嘗試過,但都無濟於事。Lodash反彈與反應輸入
search(e){
let str = e.target.value;
debounce(this.props.relay.setVariables({ query: str }), 500);
},
去抖動功能可以內嵌在JSX傳遞或直接設置爲一類方法,如下所示:
search: _.debounce(function(e) {
console.log('Debounced Event:', e);
}, 1000)
小提琴:https://jsfiddle.net/woodenconsulting/69z2wepo/36453/
如果您使用ES2015 +你可以定義你的防反彈方法在你的constructor
或componentWillMount
。
實施例:
componentWillMount() {
this.search = _.debounce(e => {
console.log('Debounced Event:', e);
}, 1000);
}
這不是那麼簡單的問題
一方面只是解決錯誤你得到,你需要在功能包你setVariables
:
search(e){
let str = e.target.value;
_.debounce(() => this.props.relay.setVariables({ query: str }), 500);
}
在另一方面,我相信反彈邏輯必須在繼電器內部封裝。
感謝您的。我現在看到的是合成事件的控制檯日誌,我需要e.target.value執行搜索。我試過e.persist(),但它似乎沒有做任何事情。 Debouncing在技術上是有效的,但沒有通過它的價值它不起作用。謝謝你的幫助。 –
我完全不能使用它,但它讓我在需要的地方去。我基本上有輸入呼叫搜索(e),然後將該事件傳遞給另一個帶有去抖動功能。我閱讀了event.persist(),但是我無法完成這項工作。謝謝你的幫助!! –
檢查此答案,以及:https://stackoverflow.com/a/28046731/551030 –