Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

287
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda