我有一个简单的列表,它存储在App组件中。这是用来显示所有的人,我希望能够添加新的人到这个名单。我无法将输入添加到我的状态中,我收到一个错误,即map不是一个函数。我没有正确地创建数组吗?
const App = () => {
const [persons, setPersons] = useState([
{
name: 'Artos Hellas',
id: 1
}
]);
const [newName, setNewName] = useState('');
const handleNewName = event => {
setNewName(event.target.value);
};
const addName = event => {
event.preventDefault();
const personObject = {
name: newName,
id: persons.length + 1
};
setPersons(persons.concat(personObject));
setPersons('');
};
const rows = () => persons.map(p => <li key={p.key}>{p.name}</li>);
return (
<div>
<h2>Phonebook</h2>
<form onSubmit={addName}>
<div>
name : <input value={newName} onChange={handleNewName} />
</div>
<div>
<button type="submit">add</button>
</div>
</form>
<h2>Numbers</h2>
<ul>{rows()}</ul>
</div>
);
};发布于 2019-09-20 22:08:29
删除setPersons('');语句,您可能希望使用setNewName('')
const addName = event => {
event.preventDefault();
const personObject = {
name: newName,
id: persons.length + 1
};
setPersons(persons.concat(personObject));
// setPersons('');
setNewName('');
};此外,您在呈现列表元素时获得了错误的key属性:
// v Not p.key
const rows = () => persons.map(p => <li key={p.id}>{p.name}</li>);此外,当你使用一个名为row的函数并将其命名为row()时,这会让人感到困惑,你可以尝试将其命名为像renderRows这样的操作,或者只使用ReactElement数组:
const renderRows = () => persons.map(p => <li key={p.id}>{p.name}</li>);
<ul>{renderRows()}</ul>
// Or
const rows = persons.map(p => <li key={p.id}>{p.name}</li>);
<ul>{rows}</ul>https://stackoverflow.com/questions/58029899
复制相似问题