Draft-JS лучший способ сохранить и получить контент формы MySql - PullRequest
0 голосов
/ 28 июня 2019

Я использую draft-js с некоторыми плагинами в качестве редактора в приложении activjs.

Я ищу хороший способ хранения данных на БД и извлечения этих данных.

Я думаю, что лучшим решением будет сохранение данных в двух разных форматах:

  • сериализованный необработанный json, чтобы в конечном итоге преобразовать содержимое для повторного редактирования в черновике
  • другой формат для использования в запросе и в пост-просмотре

В моем посте у меня есть:

  • упоминает
  • метка
  • ссылки

Теперь я думаю сохранить только текст для ссылки и тегов и использовать linkify во внешнем интерфейсе для отображения тегов href, но я ищу хорошие решения для упоминаний. Может быть сериализованное поле с текстом упоминания и идентификатором пользователей?

Я ищу решения, которые помогут мне с поиском поста по контенту и для извлечения большого количества контента с помощью быстрого запроса.

Это черновик JSON из двух строк с хэштегом и упоминанием (в entityMap)

{
  "blocks": [
    {
      "key": "19vrn",
      "text": "row 1 with mention and #hashtag",
      "type": "unstyled",
      "depth": 0,
      "inlineStyleRanges": [],
      "entityRanges": [
        {
          "offset": 11,
          "length": 5,
          "key": 0
        }
      ],
      "data": {}
    },
    {
      "key": "46e6h",
      "text": "row 2",
      "type": "unstyled",
      "depth": 0,
      "inlineStyleRanges": [],
      "entityRanges": [],
      "data": {}
    }
  ],
  "entityMap": {
    "0": {
      "type": "mention",
      "mutability": "SEGMENTED",
      "data": {
        "mention": {
          "name": "mention",
          "id": 53,
          "avatar": "b26be1f0-942b-11e9-bebb-a788574b8d0e.jpg",
          "title": ""
        }
      }
    }
  }
}

1 Ответ

0 голосов
/ 18 июля 2019

Для тех, кто ищет ту же проблему, вот как я решил эту проблему:

  • Я сохраняю postContent только с текстом this.state.editorState.getCurrentContent().getPlainText('')
  • Я сохраняюpostRawContent для будущего редактирования: convertToRaw(this.state.editorState.getCurrentContent());
  • Из postRawContent я извлекаю карту сущностей для упоминаний
  • В веб-интерфейсе я зацикливаю упоминания и заменяю @mention на соответствующий html с href

Я надеюсь, что это может кому-то помочь

...