Jede Möglichkeit zum Erstellen eines "reichen" TextInput in React Native? Vielleicht kein ausgewachsener Wysiwyg, aber vielleicht nur die Textfarbe verschiedener Textstücke ändern; wie die @ Mention-Funktion auf Twitter oder Facebook.Rich ReactNative TextInput
Antwort
Sie müssen regex verwenden, um dieses Verhalten zu erreichen. Jemand hat bereits ein Paket dafür erstellt. Werfen Sie einen Blick auf react-native-parsed-text
Diese Bibliothek ermöglicht es Ihnen, einen Text zu analysieren und Teile mit einer RegExp oder vordefinierten Mustern zu extrahieren. Derzeit gibt es 3 vordefinierte Typen: URL, Telefon und E-Mail.
Beispiel aus ihrer Github
<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},
]
}
>
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>
Das wird helfen, Muster im Text eingegeben, aber die Frage war, wie könnte ich dann den Stil dieses Textes in der Texteingabe ändern? So wie Facebook den Namen Ihrer Erwähnung mit einem blauen Hintergrund im Textfeld selbst hervorhebt. – nicholas
Sie können dies tun, indem Sie 'ParsedText' in die' TextInput'-Komponente einfügen und den Requisiten 'Wert' von' TextInput' entfernen, danach muss das Kind von 'ParsedText' einfach auf den Wert gesetzt werden, den Sie in' TextInput gesetzt haben ', wie folgt aus: ' ''
Werfen Sie einen Blick auf den TokenizedTextExample aus der reagieren-native docs. Ich denke, das wird dich nah an das bringen, was du machen willst. Der entsprechende Code folgt:
class TokenizedTextExample extends React.Component {
state: any;
constructor(props) {
super(props);
this.state = {text: 'Hello #World'};
}
render() {
//define delimiter
let delimiter = /\s+/;
//split string
let _text = this.state.text;
let token, index, parts = [];
while (_text) {
delimiter.lastIndex = 0;
token = delimiter.exec(_text);
if (token === null) {
break;
}
index = token.index;
if (token[0].length === 0) {
index = 1;
}
parts.push(_text.substr(0, index));
parts.push(token[0]);
index = index + token[0].length;
_text = _text.slice(index);
}
parts.push(_text);
//highlight hashtags
parts = parts.map((text) => {
if (/^#/.test(text)) {
return <Text key={text} style={styles.hashtag}>{text}</Text>;
} else {
return text;
}
});
return (
<View>
<TextInput
multiline={true}
style={styles.multiline}
onChangeText={(text) => {
this.setState({text});
}}>
<Text>{parts}</Text>
</TextInput>
</View>
);
}
}
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Link-Only-Antworten können ungültig werden, wenn die verlinkte Seite sich ändert – slfan
Danke für die Rückmeldung. Ich habe die Antwort wie vorgeschlagen aktualisiert. – jopecko
Whoa, ich wusste nie, dass Sie '
Lösung ist, dass Sie <Text>
Elemente wie Kinder in einem <TextInput>
wie diese verwenden:
<TextInput>
whoa no way <Text style={{color:'red'}}>rawr</Text>
</TextInput>
- 1. ReactNative TextInput- nicht sichtbar IOS
- 2. ReactNative TextInput placeholderTextColor scheint nicht zu funktionieren
- 3. ändern Textfarbe von <TextInput/> in ReactNative
- 4. ReactNative: TextInput hat seltsames Verhalten mit dem value-Attribut bei Datenbindung
- 5. WebStorm + ReactNative?
- 6. Firebase-Client auf ReactNative
- 7. ToolBarAndroid nicht in ReactNative
- 8. Getting ReactNative FacebookSDK funktioniert
- 9. Wie Push-Ansicht in Tabbar für Android in ReactNative
- 10. Kivy TextInput Cursor Steuerungsprobleme
- 11. TextInput placeHolder Alignment
- 12. Android TextInput Hinweis Textfarbe
- 13. QML TextInput Signal
- 14. Kivy TextInput Hintergrundprobleme
- 15. Wie Text in TextInput-
- 16. Rich: ExtendedDataTable in Rich: Panel ist komprimiert
- 17. Kombination von Rich: InplaceInput mit Rich: Suggestionbox
- 18. ReactNative - IOS Crash - Symbolischer Absturzbericht -
- 19. ReactNative App deinstallieren - Benutzerdaten löschen
- 20. ReactNative: Wie zentriert man Text?
- 21. Kann ich einen TextInput erstellen?
- 22. TextInput- in reagieren nativen iOS
- 23. Kivy - TextInput on_focus Verhalten Problem
- 24. if-Anweisungen und TextInput- Wert
- 25. Faule Daten laden mit Rich: DataTable und Rich: DataTableScroller
- 26. ReactNative - SSLException Erstellen von Filmen Beispiel
- 27. ReactNative VS NativeScript: Was sind Vorteile?
- 28. ReactNative: Text Überlauf über das Bild
- 29. Symbol nicht geladen auf ReactNative Android App
- 30. Wie modal entlassen durch Bildschirm in ReactNative
Haben Sie eine Lösung herausgefunden? Ich versuche, etwas Ähnliches zu tun (nur mehr wie ein Rich-Text-Editor mit ** Fettschrift **, _italics_, etc). – chapeljuice
Nein. Ich habe nie eine Lösung gefunden. In meinem Fall habe ich versucht @mentions mit einer Art Container oder Hintergrundfarbe in der Eingabe zu stylen. Am Ende wurde nur der Text von der Eingabe entfernt und in eine andere Ansicht eingefügt. War nicht ideal, aber es hat funktioniert. – nicholas
@ chapeljuice Lösung gefunden - https://Stackoverflow.com/a/49082641/1828637 – Noitidart