代码之家  ›  专栏  ›  技术社区  ›  BartoszTermena

搜索过滤器输入

  •  0
  • BartoszTermena  · 技术社区  · 6 年前

      state = {
       names: ['first', 'second']
      };
    
      updateSearch = (event) => {
       let updatedList = this.state.names;
        updatedList = updatedList.filter(name=> {
         return name.toLowerCase().search(
           event.target.value.toLowerCase()) !== -1;
         })
       this.setState({names: updatedList});
      }
    
    
     render() {
      const names = this.state.names.map((name) => { return (
        <div key={name}>
          <span>{name}</span>
        </div>
      )})
      return (
       <div>
        <input 
          placeholder="Search" 
          type="text" 
          onChange={this.updateSearch} />
            {names}
       </div>
        )
    }
    

    当我键入与名称一致的文本时, search 正在工作,仅显示该名称,但当我从 input 所有名称都应显示,但不会显示(仅显示以前搜索的名称)。为什么?

    感谢您提前回复!

    1 回复  |  直到 6 年前
        1
  •  1
  •   ashish sherawat    6 年前
      Add one more val in state as initialName and in updateSearch set updateSearch value 
    with initalNames.
    Try This.
     state = {
       names: ['first', 'second'],
       intiailNames:['first','second']
     };
    
    updateSearch = (event) => {
     let updatedList = this.state.intiailNames;
     updatedList = updatedList.filter(name=> {
     return name.toLowerCase().search(
       event.target.value.toLowerCase()) !== -1;
     })
    this.setState({names: updatedList});
     }