#arrays #reactjs #dictionary #render
Вопрос:
У меня есть массив объектов, который обновляется с помощью useState. Я вижу на консоли, что мой арай успешно обновлен. Добавлены новые элементы. Однако, когда я сопоставлю его, новые элементы отображаться не будут. Любая помощь будет высоко оценена. Это код
const Guesslist=()=gt;{ const [guestName, setGuestName]=useState(''); const [guesstLastName, setGuestLastName]=useState(''); const [guesstEmail, setGuesstEmail]= useState(''); const initialList={id:1, guesstName:'Alan', guesstLastName:'Williams',guesstEmail:'alan3@gmail.com'} const [listOfGuesst, setListOfGuesst]= useState([initialList]); let guesst={ id:Date.now(), guestName:guestName, guesstLastName:guesstLastName, guesstEmail:guesstEmail } const addGuest= ()=gt;{ let newList=[...listOfGuesst, guesst]; setListOfGuesst(newList); console.log(listOfGuesst); } useEffect(()=gt;{ console.log(listOfGuesst)} ,[listOfGuesst]) return( lt;divgt; lt;label htmlFor=""gt;First Namelt;/labelgt; lt;input type="text" onChange={(e)=gt;setGuestName(e.target.value)} value={guestName} /gt; lt;label htmlFor=""gt;Last Namelt;/labelgt; lt;input type="text" onChange={(e)=gt;setGuestLastName(e.target.value)} value={guesstLastName} /gt; lt;label htmlFor=""gt;Emaillt;/labelgt; lt;input type="text" onChange={(e)=gt;setGuesstEmail(e.target.value)} value={guesstEmail} /gt; lt;button onClick={addGuest}gt; add lt;/buttongt; lt;ulgt; {listOfGuesst.map(element=gt;{ return lt;li key={element.id}gt; {element.guesstName} lt;/ligt; })} lt;/ulgt; lt;/divgt; ) } export default Guesslist
Комментарии:
1. Ваш код должен работать правильно
2. Это не работает. Я могу отобразить только начальное значение, присвоенное массиву. Действительно, я думаю, что моя проблема связана с асинхронной природой setState, но я не знаю, как это исправить
Ответ №1:
Ошибка в том, что вы забыли о дополнительной букве «s», сначала вы инициализируете и выводите guesstName
, а при добавлении нового гостя — guestName
.
Здесь guesstName
:
const initialList = { id:1, guesstName:'Alan', guesstLastName:'Williams', guesstEmail:'alan3@gmail.com' } // ...some code // and here guesstName lt;ulgt; {listOfGuesst.map(element=gt;{ return lt;li key={element.id}gt;{element.guesstName}lt;/ligt; })} lt;/ulgt;
Когда вы добавляете нового гостя — guestName
:
let guesst={ id:Date.now(), guestName:guestName, guesstLastName:guesstLastName, guesstEmail:guesstEmail }
Комментарии:
1. В этом-то и была проблема. Очень глупая ошибка с моей стороны, очень острое наблюдение с вашей стороны. Спасибо!