React onChange coincé dans une boucle infinie

3therk1ll

J'ai une application React qui est configurée pour envoyer une demande d'API à un serveur afin de récupérer des livres qui correspondent à l'entrée de l'utilisateur.

Le problème que j'ai est que dès qu'une requête commence à être saisie dans le champ de recherche, l'application se met en boucle, envoie des centaines de requêtes et n'est arrêtée que lorsque la requête est effacée de la recherche.

Comment puis-je le limiter à un appel par changement de requête utilisateur?

import React, { Component } from 'react'
import * as BooksAPI from './utils/BooksAPI'
// import Book from './Book';

export default class SearchBooks extends Component {

    state = {
        query: '',
        books: []
    }

    updateQuery = (query) => {
        this.setState(() => ({
            query: query
        }))
    }

    clearQuery = () => {
        this.updateQuery('')
    }

    searchBook = (query) => {
        if(query.length > 0)
        BooksAPI.search(query)
         .then(books => this.setState(currentState => ({
           books: currentState.books.concat(books)
          })));
    }

    render() {

        const { query, books } = this.state
        // const { onUpdateShelf } = this.props


        const showingBooks = query === ''
        ? books
        : this.searchBook(query)

        return(
            <div className="search-books">
                <div className="search-books-bar">
                  <a className="close-search" >Close</a>
                  <div className="search-books-input-wrapper">
                    <input
                        type="text"
                        placeholder="Search by title, author or subject"
                        value={query}
                        onChange={(event) => this.updateQuery(event.target.value)}
                    />
                  </div>
                </div>
                <div className="search-books-results">
                  <ol className="books-grid">
                    <li>
                      {/* { showingBooks.map((book) => (
                       <Book
                         key={book.id}
                         book={book}
                         updateShelf={onUpdateShelf} />
                        ))} */}
                    </li>
                  </ol>
                </div>
            </div>
        )
    }
}
Chris

Vous définissez l'état à l'intérieur de votre fonction de rendu avec searchBookWhen querynot an emtpy string. La setState()méthode déclenche un nouveau rendu, mais puisque vous définissez l'état depuis l'intérieur de la fonction de rendu, elle continuera à s'appeler.

Je ne vois pas pourquoi vous avez besoin de cette fonction dans le rendu de toute façon. Vous souhaitez rechercher un livre chaque fois que la requête change, mais la requête ne peut changer que sur entrée de l'utilisateur, alors déplacez la fonction là-bas? Voici ce que je ferais:

Changer onChange={(event) => this.updateQuery(event.target.value)}pour juste onChange={this.updateQuery}. L'événement est quand même passé à la fonction.

Ensuite, déplacez votre logique bookapi vers votre updateQueryfonction:

updateQuery = (e) => {
  if(e.target.value.length > 0)
    BooksAPI.search(query)
     .then(books => this.setState(currentState => ({
       query: e.target.value,
       books: currentState.books.concat(books)
      })));
}

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Coincé dans une boucle pas si infinie?

Python coincé dans une boucle While infinie ?

Coincé dans une boucle infinie de fgets

Logique de boucle, coincé dans une boucle infinie

Coincé sur une boucle if infinie

Coincé sur une boucle infinie

window.location.reload(); coincé dans une boucle infinie

HAL_Delay () coincé dans une boucle infinie

List.orderBy est coincé dans une boucle infinie

Recherche binaire basique. Coincé dans une boucle infinie

Coincé dans une boucle While infinie, que faire

Coincé sur une boucle infinie en prologue

ConcurrentHashMap coincé dans la boucle infinie - Pourquoi?

Coincé dans une boucle infinie avec plusieurs conditions If à l'intérieur d'une boucle

Coincé dans une boucle infinie en essayant de rompre une boucle while

Sentinelle C ++ dans une boucle for et while avec un nombre. Coincé en boucle infinie

Pourquoi suis-je coincé dans une boucle infinie après avoir appelé une fonction?

Coincé dans une boucle Do-while infinie dans la liste liée

Pourquoi mon modèle keras LSTM est-il coincé dans une boucle infinie?

Coincé dans une boucle infinie en essayant de trouver la racine nième de x

Je suis coincé dans une boucle infinie avec app.factory - AngularJS

Vue-router beforeEach coincé dans une boucle infinie lors de l'utilisation de next ()

Thread coincé dans une boucle infinie malgré la valeur mise à jour

Coincé dans une boucle infinie après avoir détruit la fenêtre parent (python, Tkinter)

Coincé dans une boucle infinie lors de l'utilisation tout en continuant

Coincé dans une boucle infinie en essayant de supprimer un caractère

mon code coincé dans une boucle infinie mais je ne comprends pas la raison

Coincé dans une boucle infinie après avoir comparé deux chaînes

Pourquoi mon lecteur est-il coincé dans une boucle infinie

TOP liste

  1. 1

    comment afficher un bouton au-dessus d'un autre élément ?

  2. 2

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  3. 3

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

  4. 4

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  5. 5

    Conversion double en BigDecimal en Java

  6. 6

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  7. 7

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  8. 8

    Passer la taille d'un tableau 2D à une fonction ?

  9. 9

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  10. 10

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  11. 11

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  12. 12

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  13. 13

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  14. 14

    Exporter la table de l'arborescence vers CSV avec mise en forme

  15. 15

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  16. 16

    Créer un système Buzzer à l'aide de python

  17. 17

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  18. 18

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  19. 19

    Déplacement des moindres carrés d'ajustement pour les déplacements de points ayant des problèmes

  20. 20

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  21. 21

    Microsoft.WebApplication.targets

chaudétiquette

Archive