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

108
Views
useEffect and undefined

I'm trying to kick off undefined, but I don't understand, what I'm doing wrong. I need to initialize persons without undefinedenter image description here

import { useEffect, useState } from "react";
import { SearchBar } from "./SearchBar";
import { getPersons } from "../../apies/api";
import { ListOfPersons } from "./listOfPersons";
const Home = () => {
    const [valueOfInput, valueOfInputChange] = useState("")
    const [persons, setPersons] = useState()

    useEffect(() => {
        getPersons().then(response => setPersons(response))
    }, [setPersons]); 
    console.log(persons)

    return <div>
       <h1>Поиск персонажей</h1>
       <SearchBar personGetRequest={valueOfInputChange}/> 
       <ListOfPersons personsList={persons}/>
    </div>;
};

export default Home;
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

You should initialize the persons with empty array then it will not show undefined. Like the below code

const [persons, setPersons] = useState([])
about 4 years ago · Juan Pablo Isaza Report

0

I would suggest you to:

  1. Call the function getPersons only on mount of the component with an empty array in the dependencies array
  2. Inizialize the persons state with an empty array
  3. Be careful about the type of the response of your api (an object with count,next,previous,result fields), in order to call the function setPersons with the result
  4. Take care of errors when call the getPersons api with a catch statement which will set an empty array, for example.
  5. You may would read persons only when persons change instead of every render, so you could put your console.log inside an useEffect with persons array inside the dependencies array.
import { useEffect, useState } from "react";
import { SearchBar } from "./SearchBar";
import { getPersons } from "../../apies/api";
import { ListOfPersons } from "./listOfPersons";
const Home = () => {
    const [valueOfInput, valueOfInputChange] = useState("")
    const [persons, setPersons] = useState([])

    useEffect(() => {
        getPersons()
         .then(response => setPersons(response.data.results))
         .catch(e => setPersons([])
    }, []);

    useEffect(()=>console.log(persons),[persons])

    return <div>
       <h1>Поиск персонажей</h1>
       <SearchBar personGetRequest={valueOfInputChange}/> 
       <ListOfPersons personsList={persons}/>
    </div>;
};

export default Home;
about 4 years ago · Juan Pablo Isaza Report

0

You Should use this for fetching data

useEffect(() => {
   getPersons().then(response => setPersons(response.data.data))
}, [setPersons]); 

console.log(persons)
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!