如何在输入字段时输入列表?

时间:2017-01-03 04:03:55

标签: reactjs redux react-router react-redux

我正在尝试过滤我的字段,同时在autocomplete中绑定输入字段。我喜欢这样,但它不会过滤我的列表

这是我的代码

 onChangeHandler(e){
    console.log(e.target.value);
    var newArray = this.state.users.map((d)=>{
      return d.indexOf(e.target.value) !== -1 
    });
    console.log(newArray)
    this.setState({
      users:newArray
    })
  }

http://codepen.io/anon/pen/zNYGzb?editors=1010

2 个答案:

答案 0 :(得分:14)

您可以这样做:

class First extends React.Component {
  constructor(){
    super();
    this.state ={
      users: ['abc',"pdsa","eccs","koi"],
      input: '',
    }
  }

  onChangeHandler(e){
    this.setState({
      input: e.target.value,
    })
  }

  render (){
      const list = this.state.users
        .filter(d => this.state.input === '' || d.includes(this.state.input))
        .map((d, index) => <li key={index}>{d}</li>);

    return (<div>
      <input value={this.state.input} type="text" onChange={this.onChangeHandler.bind(this)}/>
        <ul>{list}</ul>
      </div>)
  }
}

ReactDOM.render(<First/>,document.getElementById('root'));

这实质上是在扩展你拥有的东西,而你所拥有的东西也很接近。如果你愿意,你也可以选择在changeHandler中应用过滤器,但我更喜欢这样做&#34;稍后&#34;如果可能的话,如果你想稍后添加其他过滤器或诸如此类的东西。

答案 1 :(得分:1)

您的代码也很好,您只需要在代码中将 .map 更改为 .filter 方法,一切都会正常运行。 Map方法不过滤它只是为每个元素返回一个新值,你传递一个布尔值。而你实际上想要过滤列表。

onChangeHandler(e){
    console.log(e.target.value);
    var newArray = this.state.users.filter((d)=>{
      return d.indexOf(e.target.value) !== -1 
    });
    console.log(newArray)
    this.setState({
      users:newArray
    })
  }