DevGang
Авторизоваться

Редактируемый элемент содержимого в React

Недавно передо мной была поставлена задача реализовать функцию, позволяющую пользователям беспрепятственно редактировать контент, например, изменять абзацы или заголовки. Я исследовал различные подходы к решению этой задачи, начиная от переключения текстовых элементов в элементы ввода по щелчку мыши или событиям onBlur и заканчивая использованием свойства editable в библиотеке Ant Design.

Все вышеперечисленные предложения сработали, но не дали того результата, который я искал. Затем я узнал кое-что новое. Я понял, что текстовые элементы (теги абзацев, заголовков и т. д.) также можно сделать редактируемыми с помощью встроенного атрибута contentEditable.

Переданный атрибут contentEditable делает элемент редактируемым при нажатии на него, что может быть очень полезно при создании редакторов, поэтому, по сути, это дает пользователю возможность вводить html непосредственно в DOM (Document Object Model), что, если быть честным, может быть рискованным из-за несогласованности браузеров, так что это должно быть обработано должным образом.

Как это работает

contentEditable - это свойство элемента html, которое помогает отображать насыщенные тексты в браузере и редактировать их на ходу. Сделать элемент редактируемым довольно просто.

Давайте посмотрим на пример:

В примере выше мы заметили, что в элемент передается реквизит.

contentEditable: Этот реквизит имеет значение true, что означает для браузера, что этот элемент является редактируемым.

suppressEditableContentWarning: Этот реквизит также добавлен для устранения предупреждений, возникающих при использовании реквизита contentEditable, это предупреждение, которое вы можете получить "A component is contentEditable and contains children managed by react", если используете его в проекте React.

Теперь давайте сохраним значение, которое вводится в нашем редактируемом элементе.

Теперь в этом примере мы можем наглядно увидеть, как мы перехватываем значения, введенные в редактируемый контент, и сохраняем их в состоянии. А если мы перейдем в консоль и проверим, как сработала функция onBlur, то увидим, что значение отобразилось. В нашем случае «Hello there»‎.

Существуют и другие методы сохранения данных, я решил использовать onBlur по своему усмотрению, но вы можете использовать и другие функции, например onInput, onMouseOut, onKeydown и т.д.

Редактируемые элементы не имеют функции onChange, как элементы формы (теги input, textarea и т.д.).

Давайте сделаем последний трюк. Теперь у нас есть редактируемый контент, но так же, как у input'ов есть места для вставки, когда они пусты, мы тоже можем добавить места для вставки в наши элементы, когда они пусты.

Вот как это делается:

На изображении выше вы можете видеть, что мы добавили два новых атрибута.

data-placeholder: Этот атрибут помогает нам добавить соответствующее значение места для вставки в наш элемент.

className: Это добавление имени класса к нашему редактируемому элементу, чтобы мы могли указать его в нашем css.

Затем мы сделаем последний удар, который, как мы знаем, будет в нашем css-файле.

С помощью этого css-свойства, добавленного к нашему классу элемента, наш элемент должен иметь место для вставки, указанное как data-placeholder в html.

Вот и всё, ребята!

Мы успешно создали редактируемый элемент, сохранили его состояние локально, а также добавили место для вставки, для моментов, когда он пуст.

Желаю вам успехов в разработке!

Источник:

#JavaScript #React #Начинающим
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу