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

340
Visualizações
Cómo arreglar mi filtrado de productos en React

La tarea es crear un componente Fiter.jsx que filtrará Products.jsx (puedes verlo en el repositorio)

Tengo React Componentes:

Principal.jsx

 import React from "react"; import { Products } from "../Products"; import { Filter } from "../Filter"; import { Product } from "../Product"; class Main extends React.Component { state = { products: [], filteredProducts: [], status: "all", }; onFilterStatusChange = (status) => { this.setState({ status }); }; componentDidMount() { fetch("./products.json") .then((responce) => responce.json()) .then((data) => this.setState({ products: Object.values(data) })); } filterProducts() { this.setState(({ status }) => ({ filteredProducts: status === "all" ? this.state.products : this.state.products.filter((n) => n.prod_status.includes(status)), })); } componentDidUpdate(prevProps, prevState) { if (this.state.status !== prevState.status) { this.filterProducts(); } } render() { // const { products } = this.state; return ( <main className="container content"> <Filter title="Status:" values={["all", "recommended", "saleout", "bestseller", "new"]} value={this.state.status} onChange={this.onFilterStatusChange} /> <Products products={this.state.filteredProducts} /> </main> ); } } export { Main };

Filtro.jsx

 const Filter = ({ title, values, value, onChange }) => ( <div> <h3>{title}</h3> {values.map((n) => ( <label> <input type="radio" onChange={() => onChange(n)} checked={value === n} /> {n} </label> ))} </div> ); export { Filter };

En esta etapa, la consola muestra un error y el sitio muestra lo siguiente:

Pregunta: ayuda a solucionar esto...

Repo con todos los archivos

Antes de intentar crear un filtro, el sitio se veía así:

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Oye, como otros han señalado que algunos products no tienen un prod_status , cambia n.prod_status.includes(status) a n.prod_status?.includes(status) en filterProducts , que está en el componente Main .

Una cosa más es que en el renderizado inicial muestra Nothing found pero el status está establecido en all . Debe mostrar todos los productos disponibles. Para corregir esto, cambie la condición this.state.status !== prevState.status en component.didUpdate to this.state.status !== prevState.status || this.state.products !== prevState.products .

Dado que en el primer valor de status de renderizado no cambiará, es decir. all excepto los cambios de producto de [] a [artículo...]. Entonces verifique si los productos han cambiado o no y luego ejecute la función filterProducts .

Por último, como el archivo products.json está en el directorio público, en la llamada de fetch debe escribir la ruta del archivo comenzando con / .

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