Javascript 如何在react JS中创建动态搜索过滤器?
我尝试在reactjs中实现一个搜索过滤器,我尝试将方法绑定到'onChange'事件,但它会为每个字母触发。如何使它工作后,键入3个字母Javascript 如何在react JS中创建动态搜索过滤器?,javascript,reactjs,Javascript,Reactjs,我尝试在reactjs中实现一个搜索过滤器,我尝试将方法绑定到'onChange'事件,但它会为每个字母触发。如何使它工作后,键入3个字母 var FilteredList = React.createClass({ filterList: function(event){ var updatedList = this.state.initialItems; updatedList = updatedList.filter(fun
var FilteredList = React.createClass({
filterList: function(event){
var updatedList = this.state.initialItems;
updatedList = updatedList.filter(function(item){
return item.toLowerCase().search(
event.target.value.toLowerCase()) !== -1;
});
this.setState({items: updatedList});
},
getInitialState: function(){
return {
initialItems: [
"Apples",
"Broccoli",
"Chicken",
"Duck",
"Eggs",
"Fish",
"Granola",
"Hash Browns"
],
items: []
}
},
componentWillMount: function(){
this.setState({items: this.state.initialItems})
},
render: function(){
return (
<div className="filter-list">
<form>
<fieldset className="form-group">
<input type="text" className="form-control form-control-lg" placeholder="Search" onChange={this.filterList}/>
</fieldset>
</form>
<List items={this.state.items}/>
</div>
);
}
});
var List = React.createClass({
render: function(){
return (
<ul className="list-group">
{
this.props.items.map(function(item) {
return <li className="list-group-item" data-category={item} key={item}>{item}</li>
})
}
</ul>
)
}
});
React.render(<FilteredList/>, document.getElementById('app'));
var FilteredList=React.createClass({
过滤器列表:函数(事件){
var updatedList=this.state.initialItems;
updatedList=updatedList.filter(函数(项){
return item.toLowerCase().search(
event.target.value.toLowerCase())!=-1;
});
this.setState({items:updatedList});
},
getInitialState:函数(){
返回{
姓名首字母项目:[
“苹果”,
“西兰花”,
“鸡”,
“鸭子”,
“鸡蛋”,
“鱼”,
“格兰诺拉麦片”,
“杂凑布朗”
],
项目:[]
}
},
componentWillMount:function(){
this.setState({items:this.state.initialItems})
},
render:function(){
返回(
);
}
});
var List=React.createClass({
render:function(){
返回(
{
this.props.items.map(函数(项){
return- {item}
})
}
)
}
});
React.render(,document.getElementById('app'));
,我试图为我的案例更改此代码,但我坚持在3个字母后触发它
任何想法都将不胜感激。因为传递给输入字段onChange属性的函数在您在键盘上键入时都会被调用。如果event.target.value length的值大于或等于3,则可以在执行更新状态所需的任何更改之前检查该函数的内部
filterList: function(event){
if(event.target.value.length >= 3) {
// Here you can perform what you need
}
}
因为传递给输入字段onChange属性的函数在您在键盘上键入时被调用。如果event.target.value length的值大于或等于3,则可以在执行更新状态所需的任何更改之前检查该函数的内部
filterList: function(event){
if(event.target.value.length >= 3) {
// Here you can perform what you need
}
}
修改了
filterList
函数,使其仅在有3个字符可用时才开始搜索,否则,返回initialItems
列表:
filterList: function(event){
if(event.target.value.length > 2){
var updatedList = this.state.initialItems;
updatedList = updatedList.filter(function(item){
return item.toLowerCase().search(
event.target.value.toLowerCase()) !== -1;
});
this.setState({items: updatedList});
}
else{
console.log(this.state.initialItems)
this.setState({items: this.state.initialItems})
}
}
编辑:前面的答案贴在这里,和我做的一样。我添加了一个附加的
else
条件,以便在搜索栏上没有任何内容时返回整个列表。如果符合您的要求,请将其更改为,否则。修改了过滤器列表
功能,仅在有3个字符可用时才开始搜索,否则,返回初始项
列表:
filterList: function(event){
if(event.target.value.length > 2){
var updatedList = this.state.initialItems;
updatedList = updatedList.filter(function(item){
return item.toLowerCase().search(
event.target.value.toLowerCase()) !== -1;
});
this.setState({items: updatedList});
}
else{
console.log(this.state.initialItems)
this.setState({items: this.state.initialItems})
}
}
编辑:前面的答案贴在这里,和我做的一样。我添加了一个附加的else
条件,以便在搜索栏上没有任何内容时返回整个列表。如果符合您的要求,请将其更改为,否则。onChange
在事件发生时触发。所以当偶数.target.value
as valuesinput
标记被更改时,该函数被激活。与单击或单击提交按钮后激活的onClick或onSubmit等其他方法不同,每个更改都由onChange
事件检测。这就是onChange
和onClick
之间的区别。如果你想在输入3个字母后进行搜索,那么有一个简单的方法。设置条件value.length>=3
会有帮助
onChange
在事件发生时触发。所以当偶数.target.value
as valuesinput
标记被更改时,该函数被激活。与单击或单击提交按钮后激活的onClick或onSubmit等其他方法不同,每个更改都由onChange
事件检测。这就是onChange
和onClick
之间的区别。如果你想在输入3个字母后进行搜索,那么有一个简单的方法。设置条件value.length>=3
会有帮助
请分享您已经尝试过的内容。也许只有在输入框上有3个字符时才触发搜索功能这样简单的方法也可以实现同样的效果。请访问,看看是什么和。做一些研究,搜索相关话题等;如果您遇到困难,请发布您的尝试,记录输入和预期输出,最好是在@Samridh Tuladhr中添加代码示例,请分享您已经尝试过的内容。也许只有在输入框上有3个字符时才触发搜索功能这样简单的方法也可以实现同样的效果。请访问,看看是什么和。做一些研究,搜索相关话题等;如果你被卡住了,发布你的尝试,注意输入和预期输出,最好是在@Samridh Tuladhr中,代码示例addedEven认为这看起来很简单,但一旦用户清除了字段,我们必须找回原始的选择项列表,但这里没有:)在您的代码中,@Imran Rafiq是一个不错的开发者,上面是演示:)虽然看起来很简单,但一旦用户清除了字段,我们必须找回您的代码中没有出现的原始选择项列表:)作为@Imran Rafiq,而不是上面提到的一位优秀的开发人员,演示在上面:)