有一个按名称搜索产品的输入
有一个点击处理onChangeSearch
,我们删除所有不必要的,只留下我们需要的字符
有一个函数load
,用字段中的文本向服务器发送请求(对于测试,现在只是输出到控制台)
问题是当输入任何禁止字符时,我们调用一个函数load
并向服务器发送请求,是否load
只有输入我们需要的字符才能进行函数调用?
class TodoApp extends React.Component {
constructor(props) {
super(props)
this.state = {
filter_search: ''
}
this.onChangeSearch = this.onChangeSearch.bind(this);
}
onChangeSearch(e) {
let regexp = /[^a-zа-яё,._\-\/=\!\?0-9\s]/gi;
let value = e.target.value;
value = value.replace(/^\s/, '');
value = value.replace(/ /, ' ');
value = value.replace(regexp, '');
value = value.substr(0, 25);
this.setState({
filter_search: value
});
this.load();
}
load() {
console.log('1');
}
render() {
return (
<div>
<input
value = {this.state.filter_search}
onChange = {this.onChangeSearch}
/>
</div>
)
}
}
ReactDOM.render(<TodoApp />, document.querySelector("#app"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="app"></div>
我找到了一个解决方案,我不知道这个解决方案有多正确,但它实现了它的功能
重点是:添加了一个新变量
filter_search_old
,添加到onChangeSearch
检查变量中filter_search_old
的值与从input
if获得的值之间是否匹配它们不匹配,如果它们匹配,我们调用函数load
并将新值写入filter_search_old
,因此字段中的文本没有改变。