禁用错误在输入字段中快速键入时

时间:2017-02-15 07:10:58

标签: reactjs github-api http-status-code-403

我在输入字段中输入太快时,在浏览器中收到禁止错误 403 。我在后端使用 React Js与Node和Express

以下是我保存输入的代码。

import React, {Component, PropTypes} from 'react';   

export default class SearchBox extends Component {

   constructor(props) {    
        super(props);
        this.state = {
            name: "", 
            typing :false,
            typingTimeOut :0,
        };
        this.changeName=this.changeName.bind(this);
        this.sendtoParent=this.sendtoParent.bind(this);
    }

    changeName(event) {
        const self=this;

        if(self.state.typingTimeOut)
        {
            clearTimeout(typingTimeOut);
        }

        self.setState({ 
            name: event.target.value,
            typing:false,
            typing: setTimeout(function(){ 
                self.sendtoParent(self.state.name)},1000)
        }); 
    }

    sendtoParent(){    
        this.props.searching(this.state.name,"true");
    }

    render() {
        return (
            <div >
                 <input 
                    style={styles}
                    id="SearchBox"
                    type="text"
                    placeholder='Enter the name'
                    onChange={this.changeName} 
                 />                  
            </div>
        );
    }
}   

我的名字转到了Parent,后来我从 Github Search API给了我所需的json。当我正常输入时,我的代码工作正常,但它在打字快速时出现403错误。

1 个答案:

答案 0 :(得分:1)

Github对每秒可发送的请求数量有限制。您试图在方法中引入超时以延迟发送请求,这是一种很好的方法,但实现它的方式却不起作用。

最简单的方法是将changeName函数修改为:

changeName(event) {
    const self=this;

    if(self.typingTimeOut)
    {
        clearTimeout(self.typingTimeOut);
    }

    self.typingTimeOut = setTimeout(function(){ 
            self.sendtoParent(self.state.name)},1000);

    self.setState({ 
        name: event.target.value,
        typing:false
    }); 
}