javascript - 有没有办法在 TextInput 中渲染组件?
问题描述
我正在尝试在 TextInput 上呈现@提及,我尝试在 TextInput 中将所需的组件和文本作为数组传递。
它可以工作,但是一旦更改输入,提及就会被转换为纯文本。有什么方法可以保留渲染的组件并防止它被转换为纯文本?
代码:
renderMessageWithMentions = (messageText: string) => {
const mentionsRegExp = /<@(.*?)>/g;
const mentionUIDs = R.match(mentionsRegExp, messageText).map(mention => {
let filteredStr = mention.replace(/<@/g, "");
filteredStr = filteredStr.replace(/>/g, "");
return filteredStr;
});
return R.map(text => {
if (mentionUIDs.includes(text)) {
return <Mention uid={text} />;
}
return text;
}, R.split(mentionsRegExp, messageText));
};
提及的格式如下<@UID>
。在这里,我正在循环messageText
,如果是提及,我将返回 Mention 组件,它将以蓝色文本呈现用户名,否则返回纯文本。
这是我正在渲染的:
setText = text => {
const { isTrackingStarted, previousChar } = this.state;
const lastChar = text.substr(text.length - 1);
const wordBoundry = R.trim(previousChar).length === 0;
if (lastChar === "@" && wordBoundry) {
this.startTracking();
} else if ((lastChar === " " && isTrackingStarted) || text === "") {
this.stopTracking();
}
this.setState({ text, previousChar: lastChar });
};
<TextInput onChangeText={this.setText}>
{this.renderMessageWithMentions(messageText)}
</TextInput>
解决方案
推荐阅读
- android - 使用内部应用程序共享来测试按需动态功能模块不起作用
- python - 获取“cp950”编解码器的 Unicode 解码错误无法解码位置 2516 中的字节 0x80:非法多字节序列
- vue.js - Jest+vue:“找不到模块 ....vue”
- php - 在Android中对Json输出进行排序
- r - 尝试绘制绘图时出错。我如何获得有限 xlim?
- mysql - 无法通过套接字连接到本地 MySQL 服务器'/var/run/mysqld/mysqld.sock Circle Ci/Rails/Mysql
- asp.net - 连接到 Oracle 时出错,TNS:监听器当前不知道连接描述符 ASP.NET 中请求的服务
- xml - 对不需要的属性使用 XSD 唯一的身份约束
- javascript - 如何从上一篇文章中删除 hr 标签?
- python - 使用 Kivy 在另一个屏幕中使用某个屏幕的变量