Стратегия разрыва слов в исходном тексте для строк с тире

Настраивать

react: 16.6.0-alpha.8af6728
react-native: 0.57.4

Проблема

Разрыв слов в текстовом компоненте не обрабатывает строки с тире так, как этого требует дизайн приложения. Хочу перенести слово целиком с учетом тире. При переносе слов весь этот строка с тире следует рассматривать как слово. Но у flexbox этого нет.

Код

<TouchableOpacity style = {{ width: 250, backgroundColor: 'skyblue' }}>
    <Text style = {styles.welcome}>This is a sample of text-with-dash incorrectly word breaking</Text>
</TouchableOpacity>

Ресталт выглядит так:

Стратегия разрыва слов в исходном тексте для строк с тире

Но я хочу, чтобы все закончилось так (текст с тире в отдельной строке):

Стратегия разрыва слов в исходном тексте для строк с тире

Проблема в том, что я получаю строки из онлайн-системы управления контентом и хочу решить эту проблему с помощью стиля flexbox. Может возникнуть ситуация, когда строка с тире может оказаться в одной строке, поэтому в этих случаях мне не нужно переносить слово «причина».

Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
5
0
10 227
3

Ответы 3

Не нашел для этого никакого CSS-трюка. Но вы можете использовать regx для ярлыка. просто добавьте новую строку перед любыми словами, написанными через дефис. это не идеальное решение, но, по крайней мере, для такой ситуации это сработает

        export default class App extends Component {
        constructor(props) {
        super(props);

         this.processString = this.processString.bind(this);
        }

         processString() {
         const regex = /((\w+\-(.*?)\w+)\s)/gm;
         const str = `This is a sample of text-with-dash incorrectly word breaking`;
         const subst = `\n$1`;
         const result = str.replace(regex, subst);
         return result;
        }

         render() {
             return (
                  <View style = {styles.container}>
          <TouchableOpacity style = {{ width: 250, backgroundColor: 
        "skyblue" 
         }}>
          <Text style = {styles.welcome}>{this.processString()}</Text>
           </TouchableOpacity>
          </View>
          );
           }
         }

Теперь вы можете использовать textbreakstrategy в качестве опоры Текст.

По умолчанию используется стратегия разрыва текста «высокое качество», которая разбивает слова и добавляет к ним знак «-».

Используйте «просто» в стратегии разбиения текста, чтобы избежать «-» при разрыве слов.

Например:

<Text textBreakStrategy = {'simple'}>
This is a sample of text-with-dash incorrectly word breaking
</Text>

Дополнительная ссылка: https://developer.android.com/reference/android/text/Layout.html#BREAK_STRATEGY_SIMPLE

это работает только для Android, как описано в ссылке.

gabe 16.11.2021 04:48

Используйте Unicode \u2011 из неразрывный дефис в строке. Итак, для вашего примера это будет выглядеть так:

<TouchableOpacity style = {{ width: 250, backgroundColor: 'skyblue' }}>
    <Text style = {styles.welcome}>{`This is a sample of text\u2011with\u2011dash incorrectly word breaking`}</Text>
</TouchableOpacity>

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