防抖中的Leading = true,未按预期执行

时间:2018-09-25 19:21:17

标签: react-native lodash debouncing

使用lodash的debounce(),我等待了10秒钟,然后才将搜索字词设置为应用状态。但是我想在反跳之前将searching设置为应用状态:

onChangeText(text) {
    setSearching(true);
    setSearchTerm(text);
}
render(){
    return(
        <TextInput style={s.input}
            onChangeText={_.debounce(this.onChangeText, 10000, {'leading':true} )}
        />
    )
}

From the docs,这应该在超时的最前沿运行,而不是直到事件在指定的等待时间停止为止。 实际行为就像根本没有防抖一样,每次调用事件时都会运行它们而没有10秒的缓冲区。有任何想法吗?删除{'leading':true}确实可以消除抖动,但是我需要在10秒钟之前在应用程序中设置状态。

2 个答案:

答案 0 :(得分:0)

您可以在用户情况下指定前导true。

debounce(func, [wait=0], [options={ leading: true}])

请通过链接https://lodash.com/docs#debounce阅读文档

答案 1 :(得分:0)

看看这种方法是否有帮助:

debouncedSetSearchTerm = _.debounce(text => setSearchTerm(text), 10000)

onChangeText(text) {
    setSearching(true);
    debouncedSetSearchTerm(text);
}
render() {
    return(
        <TextInput style={s.input} onChangeText={onChangeText} />
    )
}

您首先需要setSearching,然后调用debouncedFn,然后在经过10000个延迟后处理searchTerm