Как динамически отображать данные в HTML-таблицу в ответ?

Я пытаюсь отобразить список дел в таблице html в ответ. В настоящее время я делаю это, перебирая строки базы данных для каждого элемента списка дел:

todoLogs.forEach(todoLog => {
        tableHtmlContent += `
          <tr>
            <td>${todos.find(x => x.id === todoLog.id).title}</td>
            <td><input type = "checkbox" ${todoLog.d09_04_24 ? "checked" : "unchecked"}></input></td>
            <td><input type = "checkbox" ${todoLog.d08_04_24 ? "checked" : "unchecked"}></input></td>
            <td><button onClick=${deleteTodo}><i class = "material-icons">delete</i></button></td>
          </tr>
        `
      })

используя это для обновления переменной, содержащей строку шаблона:

  var tableHtmlContent = `
  <tr ref = {tableHeaderContainer} className='border-2 border-black ml-2'>
    <th>Habit</th>
    <th>09/04</th>
    <th>08/04</th>
  </tr>
  `

и рендеринг этой переменной внутри таблицы:

<table
        className='mt-3 border-2 [&>tr]:border-2 [&>tr>td]:border-2 [&>tr>th]:border-2 [&>tr>th]:px-1 text-center'
        dangerouslySetInnerHTML = { { __html: tableHtmlContent}}
      >
      </table>

Теперь мне нужно добавить функциональность onClick к кнопке в таблице, чтобы я мог удалять задачи:

<button onClick=${deleteTodo}><i class = "material-icons">delete</i></button>

- но на данный момент это не работает, и я получаю сообщение об ошибке: async is not defined

В любом случае способ сделать это с использованием строк шаблона сейчас кажется неэффективным, если не считать проблемы с кнопкой, поэтому мне интересно, есть ли лучший способ сделать это?

Вот как также выглядит таблица:

Изображение стола

Чтобы решить эту проблему, я уже изучил:

  • использоватьRef в реакции

  • функция .innerHTML()

  • использоватьState()

  • использоватьЭффект()

- но не смог найти ничего работоспособного. Любая помощь приветствуется?

Почему вы используете dangerouslySetInnerHTML, а не отображаете строки с помощью обычного JSX?

evolutionxbox 12.04.2024 11:07

вы можете добавить, как структурированы данные API и ожидаемый результат, который вы хотите... сценариев, которые мы бы выбрали, очень мало dangerouslySetInnerHTML

KcH 12.04.2024 11:08

@evolutionxbox это единственное, что я нашел, что пока работает... но я очень подозреваю, что есть лучший способ сделать что-то

Toby Hogan 12.04.2024 20:33

@KcH данные взяты из запросов GET супабазы, которые возвращают объект с несколькими атрибутами, например. идентификатор, заголовок и т. д. да, использование опасноSetInnerHTML определенно не кажется оптимальным...

Toby Hogan 12.04.2024 20:34

Да @silver77, вы могли бы добавить, как выглядят ваши данные и ожидаемый результат... мы не знаем, что требуется, просто просмотрев код

KcH 13.04.2024 07:41
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
166
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете добавлять элементы HTML в переменную JSX следующим образом:

var tableRows = {

    <table>
        <tr>
            <th>09/03</th>
            <th>10/03</th>
            <th>11/03</th>
        </tr>
        <tr>
            <td>Complete</td>
            <td>Uncomplete</td>
            <td>Complete</td>
        </tr>
        <tr>
            <td>Uncomplete</td>
            <td>Uncomplete</td>
            <td>Complete</td>
        </tr>
    </table>  

}

Затем просто добавьте эту переменную в другой элемент HTML и при необходимости обновите ее, добавив в нее любые функции, которые вам нужны:

<div>
    {tableRows}
</div>

ах да, это имеет смысл, если честно, не знаю, почему мне это не пришло в голову

Toby Hogan 23.04.2024 22:29

Другие вопросы по теме

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

Что вызывает ошибку «Отсутствует URI» в hashconnect при вызове hashconnect.openPairingModal()?
Могу ли я с помощью CSS эффективно достичь максимальной ширины = 100% и максимальной высоты = 100% без родительского элемента, имеющего явную/фиксированную ширину и высоту, альтернативный подход?
Альпийский js. Значение x-text не обновляется при изменении переменной
Маршрутизатор реагирования не работает для вложенных путей в S3
Как проверить, является ли значение массивом или объектом
Создание адаптивных фигур SVG с одинаковой шириной обводки и закругленными углами
AddEventListener и удалениеEventListener в меню при изменении размера окна
Сделать один аргумент функции необязательным в ES6
Есть ли способ заставить элемент двигаться в определенном направлении при нажатии двух клавиш?
Dropzone.js не отправляет файлы в очередь, неправильно отформатирован только файл с JavaScript