Задать вопрос
@JAdeShopKeepers

Как исправить Uncaught TypeError: Cannot read properties of undefined (reading '0')?

я хочу отрендерить кнопки на странице на вальном JS:
const weekDays = ['M', 'T', 'W', 'T', 'F', 'S', 'S'];
const habits = [
  {
    img: './assets/img/habit-1.svg',
    name: 'No Smoking',
    completed: [true, false, true, false, false, false, false],
  },
];
const toggleDayButton = ({ habitName, index }) =>
  render(
    habits.map((habit) => {
      if (habit.name === habitName) {
        habit.completed[index] = !habit.completed[index];
      }
      return habit;
    }),
  );

const getDaysWeekElement = (habitName, completed) => {
  const arg = (index) => ({ habitName, index });
  return weekDays
    .map((name, index) =>
      completed[index]
        ? ` <button class="checked" onClick="toggleDayButton(${arg(index)})">
<img width="25" src="./assets/img/check.svg" alt="check" />
</button>`
        : `<button onClick="toggleDayButton(${arg(index)})">${name}</button>`,
    )
    .join('');
};

насколько я понимаю я браузер читает completed[index] в месте где я с помощью map() пытаюсь отрендерить блок с кнопками как undefined вместо boolean значения, но я не понимаю как это исправить
  • Вопрос задан
  • 182 просмотра
Подписаться 1 Простой 4 комментария
Решения вопроса 1
MrDecoy
@MrDecoy Куратор тега JavaScript
Верставший фронтендер
const getDaysWeekElement = (habitName, completed) => {
  const arg = (index) => ({ habitName, index });
  return weekDays
    .map((name, index) =>
      completed[index]
        ? ` <button class="checked" onClick="toggleDayButton(${arg(index)})">
<img width="25" src="./assets/img/check.svg" alt="check" />
</button>`
        : `<button onClick="toggleDayButton(${arg(index)})">${name}</button>`,
    )
    .join('');
};

const getHabitElement = ({ img, name, completed }) => `
<div class="mb-8">
   <div class="habit-header">
      <img width="80" src="${img}" alt="habit-1" />
      <span class="font-semibold text-2xl">${name}</span>
   </div>
   <div class="habit-plan">
     ${getDaysWeekElement(completed)} // что принимает функция getDaysWeekElement?
   </div>
</div>`;

Спойлер: она принимает 2 аргумента, completed должен быть вторым.

- ${getDaysWeekElement(completed)}
+ ${getDaysWeekElement(name, completed)}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы