Применение css к строкам

Я использую axios для чтения данных из моего бэкэнда. Данные представляют собой строку, похожую на "phone number: {enter phone number here}".

Я хочу применить css везде, где есть фигурная скобка

let testString = "hello this is my {test} string";
testString = testString.replaceAll("{", "<span style = {{color: 'red'}}>");
testString = testString.replaceAll("}", "</span>");

Есть несколько способов, которыми я хочу применить данные.

Внутри значения TextField

<TextField
rows = {12}
multiline
value = {testString}
></TextField>

Внутри div

<div contenteditable = "true">{testString}</div>

Вместо применения css он просто отображает css в виде строки

hello this is my <span style = {{color: 'red'</span></span>>test</span> string

Контекст, в котором вы пытаетесь внедрить свою строку, вероятно, выполняет экранирование HTML в качестве меры безопасности. Если вы можете быть на 100 % уверены, что {enter phone number here} не будет содержать ничего, кроме номера телефона, то проверьте, можете ли вы отключить это экранирование.

Quasipickle 22.03.2022 19:07

Чтобы указать React анализировать строку как HTML, вам потребуется опасно установленный внутренний HTML. Совершенно уверен, что невозможно отобразить HTML в поле ввода или <textarea>.

Jacob Lamont 22.03.2022 19:07
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
2
47
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Что вы хотите сделать, понятно. Вы должны получить строку и показать ее в элементе JSX.

как это:

let testString = ... ; // what ever you get from request
<div>hello this is my <span className = "red-color">{testString}</span> string</div>

ИЛИ:

  let testString = ... ; // what ever you get from request
<div>hello this is my <span style = {{color:"red"}}>{testString}</span> string</div>

также вы можете использовать обратные кавычки, чтобы поместить переменные в ваши строки

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

Эта проблема может быть решена двумя способами, и решения следующие:

Решение 1. Использование dangerouslySetInnerHTML

export default function App() {
  let text = "The {text in here} will be color coded";

  return (
    <div>
      <div
        className = "solution-1"
        dangerouslySetInnerHTML = {{
          __html: text
            .replace("{", `<span style=color:red>`)
            .replace("}", `</span>`)
        }}
      ></div>
    </div>
  );
}

Как следует из названия, dangerouslySetInnerHTML следует использовать с осторожностью. Если строка получена из ненадежного источника, то лучше избегать этого метода, так как он подвержен XSS-атакам. Подробнее об этом здесь

Решение 2. Использование смещения подстроки

export default function App() {
  let text = "The {text in here} will be color coded";

  let i = [];
  text.replace(/[{.+?}]/g, (match, offset, string) => {
    i.push(offset + 1);
  });

  let formattedText = () => {
    return (
      <>
        <span>{text.substring(0, i[0] - 1)} </span>
        <span style = {{ color: "red" }}>{text.substring(i[0], i[1] - 1)}</span>
        <span>{text.substring(i[1], text.length)}</span>
      </>
    );
  };

  return (
     <div className = "solution-2">{formattedText()}</div>
  );
}

Второй подход получает индекс открывающей { и закрывающей } фигурных скобок из строки и применяет форматирование только к этой заключенной подстроке. Этот подход подходит, если строка содержит только один блок, заключенный в квадратные скобки, который необходимо отформатировать.

Песочницу с рабочими решениями можно найти здесь

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