#Proyecto en React

1 messages · Page 1 of 1 (latest)

gritty bramble
#

App.jsx

import { useState } from 'react';
import { ItemSearch } from './components/ItemsSearch/ItemSearch';
import Search from './components/Search/Search';

function App() {
const [results, setResults] = useState([]);
  return (
    <>
      <Search setResults={setResults} />
      <ItemSearch results={results} />
    </>
  );
}

export default App;

#

Search.jsx

import React, { useState } from 'react';
import { fetchResults } from '../API/Service';
import { ItemSearch } from '../ItemsSearch/ItemSearch';
import './search-styles.css';
import '../../index.css';

const Search = () => {
  const [searchTerm, setSearchTerm] = useState('');
  const [results, setResults] = useState([]);

  const handleSearch = async () => {
    const data = await fetchResults(searchTerm);
    setResults(data);
  };

  return (
    <header>
      <nav>
        <div className="search__container">
          <img src="../../../public/assets/Logo_ML.png" className="icon__ml" alt="logo-ML" />
          <input
            type="text"
            value={searchTerm}
            onChange={(e) => setSearchTerm(e.target.value)}
            className="input__search"
            placeholder="Nunca dejes de buscar"
          />
          <button type="submit" onClick={handleSearch} className="btn__search">
            <img src="../../../public/assets/ic_Search.png" alt="icon-search" />
          </button>
        </div>
      </nav>
      {results.slice(0, 4).map((result) => (
        <ItemSearch
          key={result.id}
          img={result.pictures.url}
          price={result.price}
          title={result.title}
          state={result.seller_address.state.name}
        />
      ))}
    </header>
  );
};

export default Search;

#

ItemSearch.jsx

import React from 'react';
import './item-styles.css';
import '../../index.css';

const ItemSearch = ({ results }) => {
  return (
    <div className="items">
      <a href="#">
        <img src={results.img} alt="img-product" className="img__product" />
      </a>
      <div className="box">
        <div className="box-2">
          <span className="price">{results.price}</span>
          {/* <img src={icon} alt="shipping" /> */}
        </div>
        <a href="#" className="description">
          {results.title}
        </a>
        <span className="province__product">{results.state}</span>
      </div>
    </div>
  );
};

export { ItemSearch };

jovial smelt
#

En search no usas el setResults de las props

gritty bramble
#

Me olvidé de descomentarlo del texto, pero igual, sigue sin funcionar

jovial smelt
#

Search = ({setResults})

#

por lo que veo results es un array

jovial smelt
#

tienes que hacer un results.map((result) => //tu jsx)

#

si haces [...todos tus resultados].title no accedes a nada, te devolvera undefined

#

porque estas accediendo a la propiedad en el array no en el objeto

#

ah no espera

#

es que es dificil leer el codigo desde discord XD

gritty bramble
#

Me perdí xd

#

Jajajajaja

jovial smelt
#

ya vi donde usas el ItemSearch

gritty bramble
#

El problema está en el componente ItemSearch entonces?

jovial smelt
#

ok ya entendi tu problema, el primero es usar el setResults de las props

#

asi puedes obtener los resultados en App.jsx

jovial smelt
jovial smelt
gritty bramble
#
 App() {
  _s();
  const [results, setResults] = useState([]);
  return /* @__PURE__ */ jsxDEV(Fragment, { children: [
    /* @__PURE__ */ jsxDEV(Search, { setResults }, void 0, false, {
      fileNam…
App.jsx:15 ƒ App() {
  _s();
  const [results, setResults] = useState([]);
  return /* @__PURE__ */ jsxDEV(Fragment, { children: [
    /* @__PURE__ */ jsxDEV(Search, { setResults }, void 0, false, {
      fileNam…
#

me lanza eso en consola @jovial smelt

jovial smelt
#

lmao

#

console.log de results?

jovial smelt
#

no puedes usar hooks fuera de una funcion

gritty bramble
jovial smelt
jovial smelt
gritty bramble
#

Esto e antes de dar el click en el boton de buscar

[]length: 0[[Prototype]]: Array(0)
VM2315 installHook.js:1861 

Y este es el despues

react_devtools_backend.js:4012 The above error occurred in the <Search> component:

    at Search (http://127.0.0.1:5173/src/components/Search/Search.jsx?t=1674682836057:24:39)
    at App (http://127.0.0.1:5173/src/App.jsx?t=1674753160513:22:33)

Consider adding an error boundary to your tree to customize error handling behavior.
Visit https://reactjs.org/link/error-boundaries to learn more about error boundaries.
jovial smelt
#

y despues se rompe

gritty bramble
gritty bramble
#

y abajo ese error que te pasé

jovial smelt
#

ok es un error distinto

#

lo que dice es que pictures no existe

#

mejor dicho, pictures.url no existe

#

dice que esta tratando de leer las propiedades de pictures, pero pictures resulto ser undefined

jovial smelt
gritty bramble
#

Search.jsx

const Search = () => {
  const [searchTerm, setSearchTerm] = useState('');
  const [results, setResults] = useState([]);

  const handleSearch = async () => {
    const data = await fetchResults(searchTerm);
    setResults(data);
    // iría acá?
    console.log(data)
  };

Te pregunto porque lo puse ahí y no me tira nada

jovial smelt
#

es undefined?

jovial smelt
gritty bramble
#

Antes del setResults(data)?

brisk raft
gritty bramble
#

La API está en otro componente

brisk raft
#

Por si acaso solo pregunto

gritty bramble
#

Sisi

#

Porque la API funciona

#

Antes me tiraba la info en una lista que hice solo para ver si funcionaba

#

Pero yo necesito que funcione en el componente de los ítems

#

Entonces le pasé ItemSearch cómo etiqueta en el jsx de Search y ahora no me tira la info

brisk raft
#

Oka

gritty bramble
#

Para mí el problema está en el componente de los ítems

#

Porque el Search funcionaba sin los ítems

#

Dejó de funcionar cuando conecté los dos componentes

brisk raft
#

Si querés vamos a un canal de voz y transmites seria más fácil

gritty bramble
#

Dale, puede ser en un rato, todavía no comí, cuando termino te etiqueto y lo vemos, puede ser?

brisk raft
#

oka

brisk raft
#

XD

#

ya entendi el problema

#

el problema esta en estas pasando props de forma individual

#

y itemSearch solo recive una

#

por ende simpre dara undefined dentro del componente

#

hice una simulacion

#
results.slice(0, 4).map((result) => (
        <ItemSearch
          key={result.id}
          results={result}
        />
      ))

#

solo debes corregir eso en el componente Search

#

y listo ya se renderizara

gritty bramble
#

Ahora lo pruebo, muchas gracias por tomarte el tiempo de verlo. Ahora te aviso que tal

gritty bramble
#

@brisk raft ahi funciona, te lo re agradezco, no sabes, estuve 2 dias y hoy con esto, muchas gracias en serio, ya estaba re frustrado jajaja

brisk raft
#

2 dias, really😐

gritty bramble
#

si

#

estuve arreglando muchos errores

#

y ese era un o que no podia solucionar

#

hace poco estoy con react

#

pero ya con esto me llevo un gran aprendizaje xd

brisk raft
#

en todo caso hubieses usado desestructuración

gritty bramble
#

La usé

#

Pero no funcionaba