'Problem with fetching data from local server using Effect Hooks

so i'm trying to fetch data, from localhost ('http://localhost:3001/persons') to http://localhost:3000/ using Effect hooks.

 const hook = () => {
    axios
      .get('http://localhost:3001/persons')
      .then(response => {
        setPersons(response.data)
        console.log(response.data)
      })
  }

I can see the response data in console, so at least that part is correct lol My best guess is that i have some logical error in the return statement of App component but I don't know what am I doing wrong. Any help would be appreciated!

here's the rest of the App.js:

import { useState, useEffect } from 'react'
import axios from 'axios'
import Person from './components/Person'
import Search from './components/Search'
import Form from './components/Form'

const App = () => {

  const [persons, setPersons] = useState([])

  const [newName, setNewName] = useState('')
  const [newNumber, setNewNumber] = useState('')
  const[searchName, setNewSearch] = useState('')
  const[personsFilter, setPersonsFilter] = useState(persons)



  const hook = () => {
    axios
      .get('http://localhost:3001/persons')
      .then(response => {
        setPersons(response.data)
        console.log(response.data)
      })
  }
  useEffect(hook, [])
  


  const addContact = (event) => {
    event.preventDefault()
    const nameObject = {
      name: newName,
      number: newNumber,
      id: persons.length+1,
    }

  const currentPerson = persons.filter((person) => person.name === newName);
      if (currentPerson.length === 1) {
        alert(`${newName} is already added to phonebook`)
      } else {
      setPersons(persons.concat(nameObject))
      setNewName('')
      setNewNumber('')
    }
  }

  const filterPersons = (event) => {
    const searchName = event.target.value.toLowerCase()
    setNewSearch(searchName)
    const newPersons = persons.filter (
      (person) => 
        person.name.toLowerCase().search(searchName) !== -1
    )
    setPersonsFilter(newPersons)
  }

  const handleNameChange = (event) => {
    setNewName(event.target.value)
  }

  const handleNumberChange = (event) => {
    setNewNumber(event.target.value)
  }

  const formData = {
    addContact,
    newName,
    setNewName,
    newNumber,
    setNewNumber,
  };

  const searchData ={
    searchName,
    filterPersons
  }

  return (
    <div>
      <h2>Phonebook</h2>
      <Search data={searchData} />
      <Form data={formData} />
      <h2>Numbers</h2>
      <ul>
           <Person personsFilter={personsFilter} />
      </ul>
    </div>
  )
}

export default App

index.js

import React from 'react';
import ReactDOM from 'react-dom/client'

import App from './App'


ReactDOM.createRoot(document.getElementById('root')).render(<App />)


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source