React Native добавить полужирный или курсив к отдельным словам в поле
Как сделать одно слово в текстовом поле жирным или курсивом? Примерно так:
<Text>This is a sentence <b>with</b> one word in bold</Text>
Если я создам новое текстовое поле для полужирного символа, он разделит его на другую строку, так что это, конечно, не способ сделать это. Это было бы похоже на Создание тега в теге , чтобы сделать одно слово полужирным.
6 ответов:
можно использовать
<Text>как контейнер для других текстовых компонентов. Вот пример:... <Text> <Text>This is a sentence</Text> <Text style={{fontWeight: "bold"}}> with</Text> <Text> one word in bold</Text> </Text> ...здесь пример.
для более веб-как чувствую:
const B = (props) => <Text style={{fontWeight: 'bold'}}>{props.children}</Text><Text>I am in <B>bold</B> yo.</Text>
вы можете использовать https://www.npmjs.com/package/react-native-parsed-text
import ParsedText from 'react-native-parsed-text'; class Example extends React.Component { static displayName = 'Example'; handleUrlPress(url) { LinkingIOS.openURL(url); } handlePhonePress(phone) { AlertIOS.alert(`${phone} has been pressed!`); } handleNamePress(name) { AlertIOS.alert(`Hello ${name}`); } handleEmailPress(email) { AlertIOS.alert(`send email to ${email}`); } renderText(matchingString, matches) { // matches => ["[@michel:5455345]", "@michel", "5455345"] let pattern = /\[(@[^:]+):([^\]]+)\]/i; let match = matchingString.match(pattern); return `^^${match[1]}^^`; } render() { return ( <View style={styles.container}> <ParsedText style={styles.text} parse={ [ {type: 'url', style: styles.url, onPress: this.handleUrlPress}, {type: 'phone', style: styles.phone, onPress: this.handlePhonePress}, {type: 'email', style: styles.email, onPress: this.handleEmailPress}, {pattern: /Bob|David/, style: styles.name, onPress: this.handleNamePress}, {pattern: /\[(@[^:]+):([^\]]+)\]/i, style: styles.username, onPress: this.handleNamePress, renderText: this.renderText}, {pattern: /42/, style: styles.magicNumber}, {pattern: /#(\w+)/, style: styles.hashTag}, ] } childrenProps={{allowFontScaling: false}} > Hello this is an example of the ParsedText, links like http://www.google.com or http://www.facebook.com are clickable and phone number 444-555-6666 can call too. But you can also do more with this package, for example Bob will change style and David too. [email protected] And the magic number is 42! #react #react-native </ParsedText> </View> ); } } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#F5FCFF', }, url: { color: 'red', textDecorationLine: 'underline', }, email: { textDecorationLine: 'underline', }, text: { color: 'black', fontSize: 15, }, phone: { color: 'blue', textDecorationLine: 'underline', }, name: { color: 'red', }, username: { color: 'green', fontWeight: 'bold' }, magicNumber: { fontSize: 42, color: 'pink', }, hashTag: { fontStyle: 'italic', }, });
использовать react native library
установить
npm install react-native-htmlview --saveОсновное Использование
import React from 'react'; import HTMLView from 'react-native-htmlview'; class App extends React.Component { render() { const htmlContent = 'This is a sentence <b>with</b> one word in bold'; return ( <HTMLView value={htmlContent} /> ); } }поддерживает почти все теги HTML.
для более продвинутого использования как
- обработки ссылок
- Пользовательский Элемент Визуализации
посмотреть этот ReadMe
Жирный текст:
<Text> <Text>This is a sentence</Text> <Text style={{fontWeight: "bold"}}> with</Text> <Text> one word in bold</Text> </Text>Курсив:
<Text> <Text>This is a sentence</Text> <Text style={{fontStyle: "italic"}}> with</Text> <Text> one word in italic</Text> </Text>
Comments