【问题标题】:How to filter and show array in react如何在反应中过滤和显示数组
【发布时间】:2019-04-20 22:06:21
【问题描述】:

我想通过在input 中输入的placeid 过滤和显示数组。

当我输入 1 时,我可以显示具有 placeid 1 的数组。

然而,在那之后,如果我输入2,什么也没有出现。

我的代码是这样的。

class List extends Component {
  constructor(props) {
    super(props)
    this.state = {
      val: ''
    }
  }
  _filterVal = e => {
    this.setState({ val: e.target.value })
  } 
  handleSetFilter = async () => {
      this.props.handleFilterVal(this.state.val);
  }
  render() {
    return (
      <div id="content">
        <div>
          <li>List</li>
          <input
            type="text"
            defaultValue=""
            onKeyUp={this._filterVal}
          />
          <button onClick={this.handleSetFilter} className='Filter'>Filter</button>
          { this.props.checkins.map((checkin, key) => {
            return(
              <div key={key}>
                <p>Placeid:{checkin.placeid}: ---- </p>
              </div>
            )
          })}
        </div>  
      </div>
    );
  }
}

export default PlaceList;
...
  handleFilterVal(val) {
    const line = this.state.lists.filter((item => {  
      return item.placeid.search( val ) !== -1; 
    }))
    this.setState({
      lists: line
    });
  }
...

另外,当我什么都不输入时,我想显示所有数组。

你能给我一些建议吗?

【问题讨论】:

    标签: javascript reactjs ethereum


    【解决方案1】:
    handleFilterVal(val) {
        const line = this.state.lists.filter((item => {  
          return item.placeid.search( val ) !== -1; 
        }))
        this.setState({
          lists: line
        });
      }
    

    您在此处进行过滤,并将您的列表状态设置为“行”。当您单击以再次过滤另一个变量时,它将过滤“列表”中的内容(这就是您输入的原始值。)

    如果您首先搜索 1,则 line 将只是一项。然后,当您再次过滤时,您将只过滤该项目。

    您可能应该有一个过滤列表的状态部分并将过滤器的结果存储在那里,而不是覆盖列表。

    【讨论】:

    • 谢谢!我明白那个。您有防止覆盖列表的想法吗?
    • 你可能应该有一部分你的状态“filteredLists”并将过滤的东西放在里面。然后显示它而不是你的“列表”。 “lists”将始终保存每个值,“filteredLists”将保存当前过滤的值。
    猜你喜欢
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2022-12-07
    • 2019-10-06
    • 1970-01-01
    • 2020-06-02
    • 2021-02-07
    相关资源
    最近更新 更多