I am trying to refactor my code into components. So right now I want to refactor the AddName
component. This AddName
component is to be pass to an event handler <form>
(below the header Add Info). The problem right now is that now after refactoring the code, exporting and importing it and passing it to the event handler, I got an error in my VS code saying setPersons
is assigned but never used. This is not something that I expect it to be since the other props in the AddName
component have no problems but only this setPersons
. I only know that to pass prop in between components, usually one will do it like this,
<AddName setPersons={setPersons}/>
In this situation it is not appropiate to use something like this right ? How can I fix this ? Below are my code,
App.js
import { useState } from 'react'
import AddName from './components/AddName'
const App = () => {
const [persons, setPersons] = useState([
{ name: 'Arto Hellas', number: '012-3456789', id: 1 },
{ name: 'Ada Lovelace', number: '013-4567890', id: 2 },
{ name: 'Dan Abramov', number: '011-1234567', id: 3 },
{ name: 'Mary Poppendieck', number: '016-5556789', id: 4 }
])
const [newName, setNewName] = useState('')
const [newNumber, setNewNumber] = useState('')
const [searchTerm, setSearchTerm] = useState("")
const handleNameChange = (event) => {
setNewName(event.target.value)
}
const handleNumberChange = (event) => {
setNewNumber(event.target.value)
}
return (
<div>
<h2> Phonebook </h2>
<input type="text" placeholder="Search..." onChange= {(event) => setSearchTerm(event.target.value)} />
<h2> Add Info </h2>
<form onSubmit={AddName}>
<div>
name: <input value={newName} onChange={handleNameChange} />
</div>
<div>
phonenumber: <input value={newNumber} onChange={handleNumberChange} />
</div>
<div>
<button type="submit"> add </button>
</div>
</form>
<h2> Numbers </h2>
<ul>
{persons.filter((person) => {
if (searchTerm === "") {
return person
} else if (person.name.toLowerCase().includes(searchTerm.toLowerCase())) {
return person
}
}).map((person) => {
return (
<li key={person.name}> {person.name} {person.number} </li>
);
})
}
</ul>
</div>
)
}
export default App
AddName.js
const AddName = (props, event) => {
event.preventDefault()
const nameObject = {
name: props.newName,
number: props.newNumber2
}
const isNameExist = (value) => props.persons.some(person => person.name.includes(value))
if (isNameExist(nameObject.name)) {
alert("name already exist")
} else {
props.setPersons(props.persons.concat(nameObject))
props.setNewName('')
props.setNewNumber('')
}
}
export default AddName