我试图添加反弹与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 –