javascript - 我如何将输入文本传递到 React 应用程序中的过滤器组件

标签 javascript r reactjs rest api

我正在尝试使用“rick and morty API”构建一个应用程序,其中包含具有各种参数(例如性别、生存状态、图像等)的 Angular 色列表。

我正在尝试创建一个搜索栏,以便我可以从 493 个字符的列表中搜索名称。

我的 CardList.js 组件:

import React from "react";
import axios from "axios";
import Card from "./Card";

class CardList extends React.Component {
  state = {
    // url: `https://rickandmortyapi.com/api/character/${[...Array(494).keys()]}`,
    character: []
  };

  async componentDidMount() {
    //const res = await axios.get(this.state.url);
    const ids = Array(493)
      .fill(null)
      .map((_, idx) => idx + 1)
      .join(","); // '1,2,3...,300'
    const url = `https://rickandmortyapi.com/api/character/[${ids}]`;
    const res = await axios.get(url);

    this.setState({
      character: res.data
    });
  }

  handleChange(e) {
    e.preventDefault();
    let typedValue = e.target.value;
    console.log(typedValue);
  }

  render() {
    let filter = this.state.character.filter(function(e) {
      return e.name.includes("Pickle Rick");
    });

    return (
      <div>        
        <form>
          <input type="text" name="title" onChange={this.handleChange} />          
        </form>

        {filter.map(character => (
          <Card
            key={character.id}
            imgURL={character.image}
            id={character.id}
            name={character.name}
            status={character.status}
            species={character.species}
            gender={character.gender}
            type={character.type ? character.type : "Unknown"}
          />
        ))}
      </div>
    );
  }
}

export default CardList;

在我的过滤方法中,我将其中一个 Angular 色的名称硬编码为“Pickle Rick”,但我想传递event.target.value,以便它可以匹配值并且可以渲染仅匹配的精确卡。 我怎样才能做到这一点?请帮帮我!

最佳答案

您可以在您所在的州设置typedValue

handleChange = e => {
    e.preventDefault();
    let typedValue = e.target.value;
    this.setState({typedValue});
}

当您初始化状态时,您可以使用空字符串初始化此typedValue

this.state = {
    character: [],
    typedValue: ''
};

在渲染中,您可以使用状态中的这些值

render() {
    const {character, typedValue} = this.state
    let filter = character.filter(char => char.name.includes(typedValue));
    // ...
}

关于javascript - 我如何将输入文本传递到 React 应用程序中的过滤器组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58710109/

相关文章:

javascript - anchor 链接偏移仅在第一次单击时不起作用

r - ggplot : How to change boxplot settings when stat_summary is used

R plotly : Custom hover text does not appear when only one stacked bar

javascript - 如何让两个或多个组件相互监听并在其他组件打开时关闭

javascript - react 组件属性

javascript - 无法使用传单上的图像叠加插件查看光栅图像(多波段卫星图像)

javascript - Android上的Chrome浏览器对音频输出有哪些要求?

r - 查询: Why does base R behave this way with factor()?

javascript - 自定义日期组件的重构代码

javascript - 为什么 react-native-onboarding-swiper 不能在我的启动画面上工作?