#Proyecto en React
1 messages · Page 1 of 1 (latest)
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 };
En search no usas el setResults de las props
Me olvidé de descomentarlo del texto, pero igual, sigue sin funcionar
No, debes usar el que viene por props
Search = ({setResults})
por lo que veo results es un array
aca lo usas como si fuera un objeto
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
ya vi donde usas el ItemSearch
El problema está en el componente ItemSearch entonces?
ok ya entendi tu problema, el primero es usar el setResults de las props
asi puedes obtener los resultados en App.jsx
vamos por partes, hay varios problemas
haz un console.log en App.jsx a results para estar seguros de que llega alli la informacion
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
ah mira, los hooks, solo pueden ser llamados dentro de componentes de react
no puedes usar hooks fuera de una funcion
Ese es otro error que solucioné también, perdón, ya lo actualizo xd jajaja
asegurate de que este componente use el setResults que le estas pasando por props
Aca es donde debes hacer el console.log de results, antes del return
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.
Primero te muestra que es un array
y despues se rompe
sumado a estos 4 errores que me tira en errores
despues sigue estando el array, vacio
y abajo ese error que te pasé
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
Aca, si quieres comenta/borra el results.slice..., todo eso para ahorrarnos ese error de momento y hazle console.log a data
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
es undefined?
colocalo antes a ver, porque setResults disparara un render
Antes del setResults(data)?
Puede que ser fetch Results sería inherente pero que hace, usa fecth o axios xd
Uso fetch
La API está en otro componente
Y tienes el .json()
Por si acaso solo pregunto
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
Oka
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
Si querés vamos a un canal de voz y transmites seria más fácil
Dale, puede ser en un rato, todavía no comí, cuando termino te etiqueto y lo vemos, puede ser?
oka
XD
ya entendi el problema
el problema esta en estas pasando props de forma individual
aqui:
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
Ahora lo pruebo, muchas gracias por tomarte el tiempo de verlo. Ahora te aviso que tal
@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
2 dias, really😐
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
en todo caso hubieses usado desestructuración