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

223
Views
Recibo este error: Llamada de enlace no válida. Los ganchos solo se pueden llamar dentro del cuerpo de un componente de función

Comenzaré diciendo que revisé esta página y no veo ninguna razón por la que reciba este error, mis versiones están bien y no tengo Reacts duplicados.

El error aparece cuando hago clic en una tarjeta.

Esta es mi aplicación.js:

 const App = () => { const [inputString, setInputString] = useState("") //Error points to here const updateInput = (e) => { const lowerString = e.target.value.toLowerCase(); setInputString(lowerString); } return ( <> <div className='search-bar-container'> <img src='https://cdn-icons.flaticon.com/png/512/868/premium/868596.png?token=exp=1647880908~hmac=5e802c3c8b8423596716ca9353212d17' className='poke-ball-img' /> <input type='text' placeholder='Search For a Pokemon!' onChange={updateInput}></input> </div> <div className='card-container'> <RenderPokemon input={inputString} /> </div> </> ); } export default App;

Y este es RenderPokemon:

 const RenderPokemon = (text) => { const [rawPokemonList, setRawPokemonList] = useState([]); const getPokemonData = async (id) => { //Move this out somehow, to avoid calling on every render try { const res = await fetch("https://pokeapi.co/api/v2/pokemon/" + id); const pokemon = await res.json(); return pokemon; } catch (e) { console.log(e); } }; const sortPokemonList = rawPokemonList.filter((poke) => { if(text.input === "") { return poke; } else { return poke.name.toLowerCase().includes(text.input) } }) useEffect((i) => { const promises = []; for (let i = 1; i < 152; i++) { promises.push(getPokemonData(i)); } Promise.all(promises).then((results)=>{ setRawPokemonList(results); }) }, []); return ( (sortPokemonList).map(poke=>( <div className='card' onClick={updatePokemonId} id={poke.id}> <img src={'https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/dream-world/' + poke.id + '.svg'} className='PokeImg' key={poke.id} id={poke.id}/> <div className='container'> <p>{poke.name}</p> </div> </div> )) ) } export default RenderPokemon;
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

lo primero :

 <input **value =inputString** type='text' placeholder='Search For a Pokemon!' onChange={updateInput}></input>
about 4 years ago · Juan Pablo Isaza Report

0

@GuyMate aquí está mi reseña:

  • primero debe pasar updatePokemonId al componente RenderPokemon.
  • El segundo e.target.value siempre estará indefinido porque las etiquetas div no tienen valores. solo las etiquetas html especiales como las inputs tienen propiedad de valor.

Entonces cambie el código de updateInput para actualizar usando la id :

 const updateInput = (e) => { const id= e.target.id.toLowerCase(); setInputString(lowerString); }

Luego debes pasarlo al componente RenderPokemon :

 <RenderPokemon input={inputString} updatePokemonId={updatePokemonId}/>

entonces deberías usar el componente RenderPokemon y usar el nombre del pokemon como id porque cada pokemon tiene una id única:

 const RenderPokemon = ({ input, updatePokemonId }) => { const [rawPokemonList, setRawPokemonList] = useState([]); const getPokemonData = async (id) => { //Move this out somehow, to avoid calling on every render try { const res = await fetch("https://pokeapi.co/api/v2/pokemon/" + id); const pokemon = await res.json(); return pokemon; } catch (e) { console.log(e); } }; const sortPokemonList = rawPokemonList.filter((poke) => { if(input === "") { return poke; } else { return poke.name.toLowerCase().includes(input) } }) useEffect((i) => { const promises = []; for (let i = 1; i < 152; i++) { promises.push(getPokemonData(i)); } Promise.all(promises).then((results)=>{ setRawPokemonList(results); }) }, []); return ( (sortPokemonList).map(poke=>( <div className='card' onClick={updatePokemonId} id={poke.name}> <img src={'https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/dream-world/' + poke.id + '.svg'} className='PokeImg' key={poke.id} id={poke.id}/> <div className='container'> <p>{poke.name}</p> </div> </div> )) ) } export default RenderPokemon;
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!