javascript - 过滤数组中的元素在 Reactjs 中不起作用

标签 javascript reactjs

我正在尝试通过从 API 获取数据来制作一个基本的应用程序。 我现在尝试通过数组过滤该数据中的值。 我正在使用react-search-input并得到“TypeError:无法读取未定义的属性'filter'”,我不明白为什么。

我需要做什么才能避免此错误?

代码在这里:

import React, { Component } from 'react';
import SearchInput, {createFilter} from 'react-search-input'

const API = 'https://swapi.co/api/people/';

class App extends Component {
    constructor(props) {
    super(props);

    this.state = {
      items: [],
      searchTerm: '',
    }
    this.searchUpdated = this.searchUpdated.bind(this)
  }

  componentWillMount() {
    this.fetchData();
  }

  fetchData = async () => {
    const response = await fetch(API);
    const json = await response.json();
    this.setState({ items: json.results })
  }

  render() {
    const items = this.state.items;
    const filteredData = items.results.filter(createFilter(this.state.searchTerm, items.results))

    return (
      <div>
        <SearchInput className="search-input" onChange={this.searchUpdated} />
        <div className="row">
            {filteredData.map((item, i) =>
              <div className="col-md-4" key={i}>
                <a href={item.url}>{item.name}</a>
                <p>Caractéristiques :</p>
                <ul>
                  <li>Année de naissance : {item.birth_year}</li>
                  <li>Taille : {item.height} cm</li>
                  <li>Masse : {item.mass}</li>
                  <li>Couleur des yeux : {item.eye_color}</li>
                  <li>Couleur de cheveux : {item.hair_color}</li>
                  <li>Couleur de peau : {item.skin_color}</li>
                </ul>
              </div>
            )}
        </div>
      </div>
    )
  }
  searchUpdated (term) {
    this.setState({searchTerm: term})
  }
}

export default App;

最佳答案

您正在尝试访问声明为空数组的 this.state.items 上的 results 属性。您应该像这样声明 items:

this.state = {
  items: { results: [] },
  searchTerm: '',
}
...
const items = this.state.items;
items.results.filter(createFilter(this.state.searchTerm, items.results))

或者简单地将results声明为数组并使用它:

this.state = {
  results: [],
  searchTerm: '',
}
...
this.state.results.filter(createFilter(this.state.searchTerm, this.state.results))

关于javascript - 过滤数组中的元素在 Reactjs 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55504324/

相关文章:

javascript - 如何重构这个 Redux 连接代码?

javascript - 如何改进我的 Backbone 代码

javascript - jQuery:$.ajaxSetup(beforeSend) 和 $(document).ajaxSend 之间有什么区别吗?

javascript - 单击表单上的下一个按钮后禁用 Scrolltop - js

javascript - 解决 promise 中的 promise 顺序

javascript - React js - 禁用混合中组件的渲染

reactjs - 如何在 MUI InputBase 中添加装饰?

javascript - 无法获取输入单选值

javascript - reactjs 中字典的正确 PropTypes 是什么

javascript - DvaJS - 将保存的状态从 localStorage 加载到状态中