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. Может возникнуть ситуация, когда строка с тире может оказаться в одной строке, поэтому в этих случаях мне не нужно переносить слово «причина».





Не нашел для этого никакого 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
Используйте 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>
это работает только для Android, как описано в ссылке.