javascript - 如何使用 react 过滤数据?

标签 javascript reactjs

我已经创建了搜索过滤器,但我无法在搜索输入中输入任何内容,这是为什么?我已经创建了 searchTermChanged 方法,但为什么它不起作用?当用户在输入字段中键入时,项目应该根据标题进行过滤。

代码:

    import Projects from '../../data/projects';

export default class Home extends Component {

  constructor(props) {
    super(props);
    this.state = {
      search: '',
      projects: Projects
    }
  }

  searchTermChanged = (event) => {
    this.setState({ projects: this.state.projects.filter(val => 
      val.title.toLowerCase().indexOf(this.state.search.toLowerCase()) > -1 ) 
    })
  }

  render() {
    return (
      <div>
          <div className="header">
            <div className="md-form mt-0 customsearch">
                <input className="form-control" type="text" placeholder="Search projects" aria-label="Search"
                value={this.state.search}
                onChange={e => this.searchTermChanged(e.target.value)} 
                />
            </div>
          </div>
          <div class="container-fluid">
            <div class="row">
              {this.state.projects.map((val,index) => (
                <div class="col-3">
                  <Card title={val.title} by={val.by} blurb={val.blurb} 
                  url={val.url} funded={val.funded} backers={val.backers} imgurl={index}/>
                </div>
              ))}
            </div>
          </div>
      </div>
    )
  }
}

最佳答案

您需要确保正确使用状态。

import Projects from '../../data/projects';

export default class Home extends Component {

  constructor(props) {
    super(props);
    this.state = {
      search: '',
      projects: Projects
    }
  }

  searchTermChanged = (search) => {
    this.setState({ 
      //Update the search state here.
       search, 
       //Use the current search state to filter
       projects: this.state.projects.filter(val => 
          val.title.toLowerCase().indexOf(search.toLowerCase()) > -1 ) 
       }
    );
  }

  render() {
    return (
      <div>
          <div className="header">
            <div className="md-form mt-0 customsearch">
                <input className="form-control" type="text" placeholder="Search projects" aria-label="Search"
                value={this.state.search}
                onChange={e => this.searchTermChanged(e.target.value)} 
                />
            </div>
          </div>
          <div class="container-fluid">
            <div class="row">
              {this.state.projects.map((val,index) => (
                <div class="col-3">
                  <Card title={val.title} by={val.by} blurb={val.blurb} 
                  url={val.url} funded={val.funded} backers={val.backers} imgurl={index}/>
                </div>
              ))}
            </div>
          </div>
      </div>
    )
  }
}

关于javascript - 如何使用 react 过滤数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53946043/

相关文章:

javascript - 如何将 Materialise 与 RequireJs 一起使用

javascript - 如何测试调度自定义事件的方法

reactjs - 如何在 react 测试库中暂停模拟服务工作人员以测试中间状态?

javascript - 将除一个之外的所有状态属性传递给函数

node.js - 如何仅在成功接收并提供(React)表单提交的数据后获取(Express)数据?

javascript - 使用 material-ui 库 react 渲染问题

javascript - ExpressJS 中的嵌套路由

javascript - PHP AJAX 无法在 'setrequestheader' 上执行 'xmlhttprequest' 对象的状态必须打开

javascript - 在 Angular 表达式中输出 JSON 数据

javascript - 如何适应具有固定高度的DIV的内容