Метод String.split() для свойства объекта, установленного через API

#javascript #reactjs #string #split #functional-programming

#javascript #reactjs #строка #разделить #функциональное программирование

Вопрос:

Привет, мне трудно понять, почему .split не работает строка, которую я передаю. Это мой анализатор строк, который возвращает строку в виде отдельных <p> тегов

 const formatString = (str) => {
        return str.split('n').map((line, index) =>
            <p key={index}>{line}</p>
        )
    }
 

Я использую API, который возвращает объект со description свойством и meta свойство.
Вот какое description значение будет отображаться в отладчике:

 description: "Level : Lv.3nType : CreaturennA special monster that's only available on the ice 
island of Rien. One of the grown Murus featuring an unusually thick lips."
 

Когда я передаю это свойство в свою formatString() функцию, оно не разбивает строку и не возвращает отдельные <p> вложенные строки, а возвращает исходные входные данные, которые возвращаются. Я также установил входные данные в качестве переменной и передал их вместо этого и получил ожидаемый результат.

ожидаемый результат:

 Level : Lv.3
Type : Creature

A special monster that's only available on the ice island of Rien. One of the grown Murus featuring an 
unusually thick lips."
 

Я пытался использовать значение, объявленное как через useRef() , так и useState() , и это, похоже, не имеет значения. Что касается неизменности, .split() она не изменяет строку, поэтому я не понимаю, почему моя функция не может ее разобрать.

Вот ссылка на смоделированную проблему в codesandbox:

https://codesandbox.io/s/amazing-maxwell-dhs4k?file=/src/App.js

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

1. Когда .split я тестировал, он правильно выполнял свою работу. Не могли бы вы опубликовать минимально полный пример? Желательно на CodeSandbox

2. попробуйте изменить свой метод разделения на str.split('\n')

3. @Nishant Я только что включил ссылку на CodeSandbox в ветку вопросов

4. Я исправил код, было больше проблем, чем просто разделение » n». Смотрите здесь: codesandbox.io/s/clever-sun-gsn6g?file=/src/App.js

Ответ №1:

Побег с помощью \

 const formatString = (str) => {
    return str.split('\n').map((line, index) =>
        <p key={index}>{line}</p>
    )
}
 

Ответ №2:

Замените все совпадения подстановочным знаком типа {{n}}, а затем выполните разделение.

 const formatString = (str) => {
         return str.replace(/\n/gi,'{{n}}')
                   .split('{{n}}')
                   .map((line, index) => <p key={index}>{line}</p>); 
};