2016-03-29 168 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); 
} 

在另一方面,我相信反弹逻辑必须在继电器内部封装。