Как мне динамически создавать компоненты из шаблонов и данных, запрошенных через API?

#javascript #reactjs #templates #mustache

#javascript #reactjs #шаблоны #усы

Вопрос:

Целью проекта является отображение панелей, которые можно настраивать в серверной части, и поэтому мы получаем шаблон и данные панелей из серверного API, компоненты на стороне клиента не предопределены, и я должен отображать содержимое путем объединения шаблона json и json данных, которые извлекаются изAPI, который я сейчас использую MustacheJS , и react-mustache-template-component для достижения этого. Я могу легко создавать списки и простые компоненты.

Но проблема возникает при создании компонентов с интерактивностью, а не простых списков, а графиков, диаграмм и каруселей с возможностью прокрутки; И шаблоны Mustache не помогают мне достичь этого, более того, поскольку я использую пакет react-mustache-template, я могу использовать только чистые HTML-элементы в своих шаблонах, пользовательских компонентах React или библиотекекомпоненты не работают, как мне решить эту проблему?

Или есть другой способ подойти к этой проблеме, дизайн шаблонов еще не исправлен, и я выбрал Mustache, потому что он удовлетворил мой первоначальный вариант использования, но теперь панели становятся более интерактивными. Есть ли другой способ решения этой проблемы?

Ответ №1:

  • Если все графики, диаграммы и карусели выглядят одинаково: я бы просто записал код.
  • Если нет, я бы определил указать некоторую структуру json, которая определяет, что с чем делать. Пример отображения предупреждения при нажатии кнопки:
 [
    {
        "identifier": "#button",
        "action": {
            "name": "click",
            "handler": {
                "type": "alert",
                "content": "clicked me!"
            }
        }
    }
]
  

В последних случаях существует функция eval, но ее использование настоятельно не рекомендуется.

Комментарии:

1. И как бы вы отобразили это во внешнем интерфейсе?

2. Просто чтобы уточнить, я намеревался написать только несколько предопределенных функций, извлеките некоторые. файл json, чтобы знать, где привязывать и какую функцию запускать. Может быть, вы могли бы сделать что-то более причудливое, например, принять массив обработчиков или принять действие. name = «проведите пальцем» и делайте все, что хотите.