使用输入框从React.js中提取GET请求的结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用输入框从React.js中提取GET请求的结果相关的知识,希望对你有一定的参考价值。

我有一个组件,我希望能够使用GET向itunes提取axios请求的结果。

import React, { Component } from 'react';
import api from '../utils/api';

import axios from 'axios';

export default class App extends Component {
  constructor(props) {
    super(props);
    this.state = { artists: [], artistSearched: '' };
    this.handleSearchTermChange = this.handleSearchTermChange.bind(this);
    this.getArtists = this.getArtists.bind(this);
  }

  componentDidMount() {
    this.getArtists(this.state.artists);
  }

  getArtists(artist) {
    this.setState(function() {
      return {
        artists: artist,
      };
    });

    api.getItunesArtists(artist).then(
      function(artists) {
        this.setState(function() {
          return {
            artists: artists,
          };
        });
      }.bind(this)
    );
  }

  handleSearchTermChange(event) {
    this.setState({ artistSearched: event.target.value });
  }

  render() {
    return (
      <div>
        <h1>Itunes Album Fetcher</h1>
        <form style={{ marginTop: '20px' }}>
          <input
            onChange={this.getArtists}
            value={this.state.searchTerm}
            className="form-control"
            placeholder="Enter album name"
          />
        </form>
      </div>
    );
  }
}

我想我必须重写'getArtists'方法。但那没用。

 getArtists(artist) {
  this.setState(function() {
      return {
        artists: null
        artistSearched: handleSearchTermChange(artist),
      };
    });

    api.getItunesArtists(artist).then(
      function(artists) {
        this.setState(function() {
          return {
            artists: artists,
          };
        });
      }.bind(this)
    );
  }

任何帮助,将不胜感激!

答案
 render() {
 {artists, artistSearched} = this.state;
  const filteredArtists = artists.length && artists.filter(item => item.artistName.toLowerCase().includes(artistSearched.toLowerCase()))
    return (
      <div>
        <h1>Itunes Album Fetcher</h1>
        <form style={{ marginTop: '20px' }}>
          <input
            onChange={this.getArtists}
            value={this.state.searchTerm}
            className="form-control"
            placeholder="Enter album name"
          />
        </form>
      {filteredArtists.length ? <div> filteredArtists.map(item => item.artistName) </div> : <div> no artists searched </div>}
      </div>
    );
  }

您从未使用搜索词过滤艺术家数组。如果其他一切正常,那么过滤艺术家将保留与您的搜索词包含相同名称的艺术家。

const filteredArtists = artists.length && artists.filter(item => item.artistName.toLowerCase().includes(artistSearched.toLowerCase()))

item.artistName只是您需要将对象的属性替换为您对每个艺术家的请求返回的属性的名称。

以上是关于使用输入框从React.js中提取GET请求的结果的主要内容,如果未能解决你的问题,请参考以下文章

当我使用 React.js 在 Heroku 中使用 Axios 执行 GET 请求时,我应该使用哪个基本 url

如何从跨多个页面的 GET 请求中提取所有结果?

axios GET 请求有效,但无法将结果内容分配给变量

制作 PHP 下拉框从 SQL 数据库中提取数据

如何等待在 react.js 中渲染视图,直到 $.get() 完成?

使用 axios 从 react js 调用 Spring Boot get 方法时,浏览器显示“请求已被 CORS 策略阻止”