, чтобы сохранить свой прогресс
2 апр. 2022 г., 2:41

Обсуждение задания "Use Advanced JavaScript in React Render Method"

До того как мы нажали на кнопку, значение randomIndex равен пустой строке, а это значит
const answer = possibleAnswers[""]; Почему в данном случае мы не получаем ошибку? Как вычислятся значение {answer} в JSX до нажатия на кнопку?
Артем, в данном случае код компонента не совсем корректен. Если бы у нас тут был TypeScript, то мы точно получили бы ошибку. Дело в том, что элементы из массива мы получаем по числовому индексу, то есть в нашем случае randomIndex должен быть именно числом, а у нас в стейте по-умолчанию да, задается пустая строка. Сделано это, вероятнее всего, чтобы точно не получить ни одного элемента. То есть possibleAnswers[""] в нашем случае ничего не вернет. Здесь, конечно же, логичней было бы по-умолчанию задать что-то типа -1.
В остальном все работает как обычно: при попытке получения из массива элемента по указанному индексу мы его или получаем (если он есть) или нет. В нашем случае до клика мы его не получаем, потом и ничего в ответ не выводится. А по клику задается существующий индекс, выполняется ререндеринг компонента, получаем элемент массива и выводим его.
Николай, спасибо за ответ. Вероятно я полагал что пытаясь получить элемент массива не по индексу, а по пустой строке мы должны получить ошибку. Сейчас проверил вот такой код - const digits = ['a', 'b' , 'c']; console.log(digits['']); В итоге мы получаем undefind. Получается что если {answer} undefind, то реакт просто не выводит undefind в html.
Артем, все верно: реакт не выводит undefined. Так же он не выводит null, false, true. Можете сами попробовать вставить в любом месте шаблоа {false}, к примеру.

Добавить комментарий