Я пытаюсь отобразить список дел в таблице 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()
использоватьЭффект()
- но не смог найти ничего работоспособного. Любая помощь приветствуется?
вы можете добавить, как структурированы данные API и ожидаемый результат, который вы хотите... сценариев, которые мы бы выбрали, очень мало dangerouslySetInnerHTML
@evolutionxbox это единственное, что я нашел, что пока работает... но я очень подозреваю, что есть лучший способ сделать что-то
@KcH данные взяты из запросов GET супабазы, которые возвращают объект с несколькими атрибутами, например. идентификатор, заголовок и т. д. да, использование опасноSetInnerHTML определенно не кажется оптимальным...
Да @silver77, вы могли бы добавить, как выглядят ваши данные и ожидаемый результат... мы не знаем, что требуется, просто просмотрев код



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете добавлять элементы 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>
ах да, это имеет смысл, если честно, не знаю, почему мне это не пришло в голову
Почему вы используете
dangerouslySetInnerHTML, а не отображаете строки с помощью обычного JSX?