Javascript 对ReactJS使用Lodash u0.throttle()

Javascript 对ReactJS使用Lodash u0.throttle(),javascript,reactjs,underscore.js,lodash,Javascript,Reactjs,Underscore.js,Lodash,我试图使用Lodash throttle函数来限制文本输入上的onChangeText事件。不过,这似乎没有什么区别: <TextInput {...this.c('tokenInput')} onChangeText={ _.throttle((text) => { this.onChangeText(text) }, 1000) } value={this.state.text} placeholder='Select...' /&

我试图使用Lodash throttle函数来限制文本输入上的onChangeText事件。不过,这似乎没有什么区别:

<TextInput {...this.c('tokenInput')}
    onChangeText={ _.throttle((text) => {
        this.onChangeText(text)
    }, 1000) }
    value={this.state.text}
    placeholder='Select...'
/>
{
此.onChangeText(文本)
}, 1000) }
值={this.state.text}
占位符=“选择…”
/>

我怎样才能做到这一点?每次我在输入中键入内容时,它都会在每次更改时执行onChangeText()。

onChange必须是一个函数,但在您的上下文中它是一个函数调用。因此,要解决这个问题,您必须采取以下措施:

<TextInput {...this.c('tokenInput')}
    onChangeText={ text => _.throttle(x => {
        this.onChangeText(x)
    }, 1000)(text) }
    value={this.state.text}
    placeholder='Select...'
/>
\节气门(x=>{
此.onChangeText(x)
},1000)(文本)}
值={this.state.text}
占位符=“选择…”
/>

这是因为您将onChangeText设置为等于函数返回值,而不是函数。这意味着每次重新渲染时,它都在执行节流功能。应该像
onChangeText={(text)=>{/*do throttle stuff here*/}}
@Jayce444我把它改成了
onChangeText={(text)=>{{uu.throttle((text)=>{this.onChangeText(text)},1000}
。现在根本不执行onChangeText方法。你能给我一个实现的例子吗?@Jayce444
\ throttle
返回一个函数你在代码中的任何地方都做过onChangeText函数绑定吗?@Dez不,不绑定这没有任何作用。onChangeText()方法根本没有被执行。
\u0.throttle
返回一个函数然后onChangeText是错误的方法。也许只是一次改变?你确定不是节流吗?也许它只是看起来没有节流。您能否将句点更改为10000以检查它是否仍然正常工作?@Tobias For the future如果您遇到此问题(以及其他问题),它不起作用,因为每次触发
onChangeText
时组件都会重新渲染,因此节流阀会返回到零,因为它都会重新渲染。节流应该在onChangeText调用的函数内执行,而不是在render方法本身内执行。谢谢你的帮助:)