Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

278
Views
Cómo mostrar "no se encontraron registros" después de ejecutar una búsqueda en React

He estado tratando de agregar el mensaje "no se encontraron registros" después de realizar una búsqueda de nombres de trabajadores. Pero no he tenido éxito. Recibo 20 mensajes de "no se encontraron registros" o ninguno. No estoy seguro de lo que estoy haciendo mal, pero he estado probando durante las últimas 4 horas varios métodos y soluciones.

Sé que esto debería ser simple de implementar, pero ha sido difícil. Aquí hay un enlace a mi código en codesandbox: https://codesandbox.io/s/fe-hatc-ass-search-n62kw?file=/src/App.js

Cualquier idea sería útil... Las cosas que probé fueron, si no declaraciones, operadores lógicos... etc...

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Mirando su código, el problema es que está filtrando en cada componente <Order> individual. El filtrado debe realizarse en el componente principal Orders y solo debe representar un componente <Order> si se encuentra una coincidencia.

Actualmente, su componente <Order> se está procesando, incluso si no hay ninguna coincidencia.

about 4 years ago · Juan Pablo Isaza Report

0

En mi opinión, lo primero que debe pensar es qué datos necesita y cuándo los necesita. Para no mostrar los resultados que desea, necesitará el nombre de los trabajadores en el componente que realiza el filtrado. Entonces lo necesitaría en el componente de pedidos. Fusionaría los datos del trabajador con los datos del pedido y luego puede filtrar y manipular los datos después de eso. Eso también evitaría que realice una solicitud de API cada vez que alguien cambie la entrada y todo lo que necesita hacer es filtrar los datos ya obtenidos. Luego, puede verificar la longitud de la matriz y, si es mayor que 0, puede mostrar los resultados; de lo contrario, mostrar una declaración sin resultados.

Entonces algo como lo siguiente:

Componente de pedidos

 import React, { useEffect, useState } from "react"; import "./Orders.css"; import Order from "./Worker"; import axios from "axios"; const Orders = () => { const [orders, setOrders] = useState([]); const [results, setResults] = useState([]); const [searchedWorker, setSearchedWorker] = useState(""); const getOrders = async () => { const workOrders = await axios.get( "https://api.hatchways.io/assessment/work_orders" ); const mappedOrders = await Promise.all(workOrders.data.orders.map(async order => { const worker = await axios.get( `https://api.hatchways.io/assessment/workers/${order.workerId}` ); return {...order, worker: worker.data.worker} })) setOrders(mappedOrders); }; useEffect(() => { getOrders(); }, []); useEffect(() => { const filtered = orders.filter(order => order.worker.name.toLowerCase().includes(searchedWorker)); setResults(filtered) }, [searchedWorker, orders]) return ( <div> <h1>Orders</h1> <input type="text" name="workerName" id="workerName" placeholder="Filter by workername..." value={searchedWorker} //property specifies the value associated with the input onChange={(e) => setSearchedWorker(e.target.value.toLowerCase())} //onChange captures the entered values and stores it inside our state hooks //then we pass the searched values as props into the component /> <p>Results: {results.length}</p> {results.length > 0 ? results.map((order) => ( <Order key={order.id} lemon={order} /> )) : <p>No results found</p> } </div> ); }; //(if this part is true) && (this part will execute) //is short for: if(condition){(this part will execute)} export default Orders;

Entonces puede simplificar su componente de pedido único

 import React from "react"; const Order = ({ lemon }) => { return ( <div> <div className="order"> <p>Work order {lemon.id}</p> <p>{lemon.description}</p> <img src={`${lemon.worker.image}`} alt="worker" /> <p>{lemon.worker.name}</p> <p>{lemon.worker.company}</p> <p>{lemon.worker.email}</p> <p>{new Date(lemon.deadline).toLocaleString()}</p> </div> </ div> ); }; export default Order;
about 4 years ago · Juan Pablo Isaza Report

0

Puede agregar un estado en Orders.js para contar cuántos elementos se presentan. Sin embargo, dado que cada Worker depende de una llamada a la API, debe tener la respuesta (getWorker, en Workers.js) y esperar la respuesta para realizar el conteo. Cada vez que cambie el valor de entrada, debe restablecer el contador a 0.

https://codesandbox.io/s/fe-hatc-ass-search-forked-elyjz?file=/src/Worker.js:267-276

Además, como comentario, es más seguro poner las funciones que se ejecutan en useEffect, dentro de useEffect, de esta manera es más fácil ver si te falta una dependencia.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!