To render a mention-formatted string outside of a TextInput (e.g., in a message bubble), use parseValue to break the string into parts and map over them with a custom renderer.
import { Part, Config, parseValue, isTriggerConfig } from 'react-native-controlled-mentions';
const renderPart = (part: Part, index: number) => {
if (!part.config) {
return <Text key={index}>{part.text}</Text>;
}
if (isTriggerConfig(part.config)) {
return (
<Text
key={`${index}-${part.config.trigger}`}
style={part.config.textStyle}
>
{part.text}
</Text>
);
}
return (
<Text key={`${index}-pattern`} style={part.config.textStyle}>
{part.text}
</Text>
);
};
const ValueRenderer = ({ value, configs }: { value: string, configs: Config[] }) => {
const { parts } = parseValue(value, configs);
return <Text>{parts.map(renderPart)}</Text>;
};
import { Part, Config, parseValue, isTriggerConfig } from 'react-native-controlled-mentions';
const renderPart = (part: Part, index: number) => {
if (!part.config) {
return <Text key={index}>{part.text}</Text>;
}
if (isTriggerConfig(part.config)) {
return (
<Text
key={`${index}-${part.config.trigger}`}
style={part.config.textStyle}
onPress={() => console.log('Pressed', part.data)}
>
{part.text}
</Text>
);
}
return (
<Text key={`${index}-pattern`} style={part.config.textStyle}>
{part.text}
</Text>
);
};
const renderValue: FC = (value: string, configs: Config[]) => {
const { parts } = parseValue(value, configs);
return <Text>{parts.map(renderPart)}</Text>;
};