在 TextInput 中实现 @mention

2023-12-20

如何在React Native的TextInput中实现@mention?

我试过这个反应本机提及 https://github.com/harshq/react-native-mentions但它不再被维护了。有很多样式问题和回调问题。

我想要的是在 TextInput 中显示自定义视图。像这样的东西。

点击列表后我想显示如下:

到目前为止我能够实现:

当我在 TextInput 中输入“@”时,会出现用户列表。

当我点击用户时,我在 TextInput 中得到用户名

Code:

   renderSuggestionsRow() {
      return this.props.stackUsers.map((item, index) => {
         return (
            <TouchableOpacity key={`index-${index}`} onPress={() => this.onSuggestionTap(item.label)}>
               <View style={styles.suggestionsRowContainer}>
                  <View style={styles.userIconBox}>
                     <Text style={styles.usernameInitials}>{!!item.label && item.label.substring(0, 2).toUpperCase()}</Text>
                  </View>
                  <View style={styles.userDetailsBox}>
                     <Text style={styles.displayNameText}>{item.label}</Text>
                     <Text style={styles.usernameText}>@{item.label}</Text>
                  </View>
               </View>
            </TouchableOpacity>
         )
      });
   }

   onSuggestionTap(username) {
      this.setState({
         comment: this.state.comment.slice(0, this.state.comment.indexOf('@')) + '#'+username,
         active: false
      });
   }

   handleChatText(value) {
      if(value.includes('@')) {
         if(value.match(/@/g).length > 0) {
            this.setState({active: true});
         }
      } else {
         this.setState({active: false});
      }
      this.setState({comment: value});
   }
render() {
      const {comments} = this.state;
      return (
         <View style={styles.container}>
            {
               this.state.active ?
               <View style={{ marginLeft: 20}}>
                  {this.renderSuggestionsRow()}
               </View> : null
            }
            <View style={{ height: 55}}/>
            <View style={styles.inputContainer}>
               <TextInput
                  style={styles.inputChat}
                  onChangeText={(value) => this.handleChatText(value)}
               >
                  {comment}
               </TextInput>

               <TouchableOpacity style={styles.inputIcon} onPress={() => this.addComment()}>
                  <Icon type='FontAwesome' name='send-o' style={{fontSize: 16, color: '#FFF'}}/>
               </TouchableOpacity>
            </View>
         </View>
      );
   }

一种简单的解决方案是使用反应本机解析文本 https://github.com/taskrabbit/react-native-parsed-text。 这是一个例子:

import * as React from "react";
import { Text, View, StyleSheet } from 'react-native';
import ParsedText from 'react-native-parsed-text';

const userNameRegEx = new RegExp(/@([\w\d.\-_]+)?/g);
export default class Example extends React.Component {

  handleNamePress = (name) => {
    alert("Pressed username " + name);
  }

  render() {
    return (
      <View style={styles.container}>
        <ParsedText
          style={styles.text}
          parse={
            [
              {pattern: userNameRegEx, style: styles.username, onPress: this.handleNamePress},
            ]
          }
          childrenProps={{allowFontScaling: false}}
        >
          This is  a text with @someone mentioned!
        </ParsedText>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  text: {
    color: 'black',
    fontSize: 15,
  },
  username: {
    color: 'white',
    fontWeight: 'bold',
    backgroundColor: "purple",
    paddingHorizontal: 4,
    paddingBottom: 2,
    borderRadius: 4,
  },
});

但是,该库不支持渲染自定义视图。上面的例子是通过纯粹的样式实现的。如果您需要自定义视图,您需要自己实现一些东西。很长一段时间以来,不可能渲染嵌入文本组件中的任意组件。然而,现在情况已经改变了,我们可以做这样的事情:

<Text>Hello I am an example <View style={{ height: 25, width: 25, backgroundColor: "blue"}}></View> with an arbitrary view!</Text>

在这里检查两个代码示例:https://snack.expo.io/@hannojg/restless-salsa https://snack.expo.io/@hannojg/restless-salsa

一个重要的注意事项:您可以渲染的输出ParsedText或您自己的自定义组件TextInput, 像这样:

<TextInput
 ...
>
  <ParsedText
   ...
  >
    {inputValue}
  </ParsedText>
</TextInput>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 TextInput 中实现 @mention 的相关文章

  • 在 React Native 中将 Props 传递到屏幕

    我已经开始学习 React Native 并且一如既往地从创建可重用组件开始 我了解了如何在创建自定义组件时传递和访问 props 我想在 React Native 中创建一个基本屏幕 它具有通用属性 并且我的应用程序中的所有屏幕都可以设置
  • React Native - 在单元测试中模拟 FormData

    我在测试我的 thunk 时遇到问题 因为我的许多 API 调用都使用 FormData 而且我似乎不知道如何在测试中模拟它 我正在使用杰斯特 我的安装文件如下所示 import isomorphic fetch Mocking the g
  • React Native - 跨屏幕传递数据

    我遇到了一些麻烦react native应用程序 我不知道如何跨屏幕传递数据 我意识到还有其他类似的问题在 SO 上得到了回答 但是这些解决方案对我来说不起作用 我正在使用StackNavigator 这是我的设置App js file e
  • React Native 反应导航 SafeArea 问题

    我更新了我的android项目 react navigation was 3 x 搬去5 x 决定实施必要的更改 但它不想工作 从反应导航页面复制了示例 但仍然显示相同的错误 有人知道问题出在哪里吗 当我用谷歌搜索一半的互联网时找不到解决方
  • 滚动视图上的固定按钮

    我目前正在尝试在屏幕右下角的滚动视图上显示一个按钮 但它不起作用 当我滚动视图时按钮会移动 我尝试先插入按钮 但滚动视图位于其上方 class HomePage extends Component loadUserItems this pr
  • EXPO:无法解析模块“./debugger”

    重新加载后 我的应用程序已停止加载 A 我已经尝试过模拟器和 2 个真实设备 android 和 ios 错误是 错误 无法解析模块 debugger ui debuggerWorker d9da4ed7来自 有时我会收到错误 无法找到实例
  • 如何为 HOC 创建共享状态?

    我创造了LoadBookHOC包裹着BookDetails and BookSummary成分 LoadBookHOC js const LoadBookHOC InnerComponent gt class LoadBook extend
  • 无法解析“...”的依赖关系:无法解析项目:react-native-navigation

    问题描述 仔细按照中的说明进行操作后https wix github io react native navigation docs Installing https wix github io react native navigatio
  • Firebase Web 与 iOS 和 Android 版本的 React Native 项目

    我是应用程序开发新手 这让我很困惑 我有一个用react native 创建的项目 我希望它可用于android 和iOS 我看过一些关于如何为 React Native 后端创建 Firebase 数据库的教程 其中一些在构建应用程序时选
  • React Native 的捆绑包是什么?它的用途是什么?

    我试图了解该捆绑包到底是什么以及它的目的是什么 我可以或不能用它做什么 我看到 当您运行命令 react native start 时 打包程序将被初始化 当您使用 react native run android 或 run ios 在设
  • 我应该使用 redux-form 存储而不是组件状态和 Redux 自定义存储吗?

    我相信任何应用程序都应该有一个事实来源 我的应用程序将有 90 多种交易表格和 150 份报告 复杂的数据结构 父级 子级 计算 所以在 React 中我发现了三个令人困惑的存储状态的地方 组件状态 当我们don t想要共享数据 Redux
  • react-native-firebase 无法处理通知 click_action 导航到通知屏幕

    我正在使用这个react native firebase和react navigation进行导航 我可以成功地从服务器或控制台推送通知 无论它是在前台还是后台 但我发誓文档不太清楚如何打开通知并导航到通知它所属的屏幕 这些是我的 onMe
  • 纯组件在没有变化时渲染?

    我有一个像这样的纯组件 interface Props checkBoxTitleStyle any checkBoxBackgroundColor any onPressCheckBox id isChecked selectedArra
  • 用笑话测试实现react-leaflet映射的react组件的问题

    当我尝试测试实现react leaflet库的react组件时 遇到以下问题 C digital booking ui node modules react leaflet lib index js 1 Object
  • 将 React Native 应用程序嵌入到现有的 ios/android 应用程序中

    我需要知道是否可以在现有的 ios android 应用程序中 嵌入 一个 React Native 应用程序 而不共享 React Native 应用程序代码 我们目前有一个 React Native 应用程序 它使用一些插件依赖项 并被
  • React Native v0.71.8 React-native-vector-icons 你看不到的图标

    我在用react native版本v0 71 8 我安装了react native vector icons库 但图标未显示 似乎链接在最新版本的 React Native 中不再起作用 所以我按照说明进行操作 但它不再编译 出现以下错误
  • 为什么当我保存更改时,Expo 没有刷新?

    当我进行更改并保存它们时 模拟器中的应用程序不会刷新 我认为模拟器没有连接到 Metro 服务器 我尝试通过运行清除缓存expo r c 但这没有做任何事情 您是否尝试启用快速刷新 我遇到了同样的问题 但在启用 快速刷新 后 自动刷新再次开
  • 用于 React Native 的 Chrome 调试工具:多个问题

    预先感谢您的帮助 我宁愿是 RN 和 Android 的新手 我使用 create native init 来创建项目 Issue 1 when i first ctrl M and choose Debug JS Remotely it
  • 视图有阴影集但无法有效计算阴影

    我收到此错误消息 gt View 54 of type RCTView has a shadow set but cannot calculate shadow efficiently 错误信息很清楚 只是不知道是哪个视图 54 有没有办法
  • 某些设备上的启动画面扭曲

    我在修复 Android 上的启动画面扭曲问题时遇到问题 我正在使用 React Native 请注意 这种情况仅发生在某些设备上 例如 我有一台 Android 版本为 4 2 2 的三星 启动画面不扭曲 而 Android 版本为 8

随机推荐

  • 多行 UILabel 上的自动收缩

    是否可以在多行上联合使用 autoshrink 属性UILabel 例如 2 行可用的大文本大小 我找到了这个链接http beckyhansmeyer com 2015 04 09 autoshrinking text in a mult
  • 以编程方式为 iPhone 创建 x509 证书,而不使用 OpenSSL

    有没有一种方法可以仅使用 Apple 安全框架以编程方式在 iPhone 应用程序中创建自签名证书 即不必搞乱 OpenSSL 吗 如果没有 openSSL 或 RSA 库 这似乎是不可能的 我搜索了一些答案 这似乎是最好的 甚至包括与此问
  • Visual Studio C++ 2010 中的自动创建实现[重复]

    这个问题在这里已经有答案了 我想知道是否有一种方法可以编写完整的头文件并让 Visual Studio 创建适当的实现文件来节省所有额外的工作 我觉得他们一定想到了 因为这是一个如此简单的事情 但我在任何地方都找不到它 CodeWiz ht
  • 在Visual Studio中查看xml文件时如何获取某个节点的xpath?

    当我在 Visual Studio 中打开 xml 文件并浏览它时 我想获取光标处某个节点的 xpath 例如右键单击并选择 从该节点获取 xpath 或类似的内容 我们如何在 Visual Studio 2010 中做到这一点 或者使用哪
  • bootstrap,带下拉菜单的工具提示,在按钮组中似乎有效果

    在引导程序中 带有下拉菜单的工具提示 当我将鼠标悬停在负责工具提示的按钮上时 附加到按钮组中一个按钮的悬停数据切换似乎会产生效果 然后它还会调整其看起来不太好的位置 请帮我 这是我的代码
  • 创建数据透视表时VBA运行时错误5

    我搜索了互联网代码 并能够组合一个宏来通过 VBA 创建数据透视表 当创建数据透视表缓存时 我不断收到运行时错误 5 无效的过程调用或参数 Set myPivotTable ThisWorkbook PivotCaches Create S
  • 如何将值推入 jsonb 列中的 key[] 中?

    我有这样的jsonbPostgres 表中的结构 res 123 223 我想将价值观推向res 大批 我不知道数组中有多少个值jsonb insert在位置上操作 所以我尝试了 1位置 select jsonb insert res 12
  • 如何使用 Spring ROO 访问第三方 API(例如:Facebook、Linkedin、Twitter)

    我正在尝试使用 Spring ROO 访问第三方 API 例如 Facebook Linkedin Twitter 可以使用 Spring ROO 来做吗 如果可能的话 请帮助我 我该怎么做 谢谢 穆尼 如果您专门针对社交网络集成 您可以轻
  • ASP.NET MVC - 根据 Active Directory 对用户进行身份验证,但需要输入用户名和密码

    我正在开发一个 MVC3 应用程序 该应用程序需要根据 AD 对用户进行身份验证 我知道 MVC3 中有一个选项可以创建一个 Intranet 应用程序 该应用程序自动根据 AD 对用户进行身份验证 但它使用 Windows 身份验证并自动
  • 如何在 VB6 中重新初始化 UDT?

    我有一个循环 它读取一堆 XML 文件 对于每个文件 它验证 XML 中的数据并将其加载到一些 UDT 中 然后对数据进行一些处理 然后它返回到循环的开头 并且 UDT 中仍然包含先前 XML 中的数据 如果在新标签中定义了该标签 则会覆盖
  • docker-compose 重启间隔

    我有一个docker compose yml文件包含以下内容 services kafka listener build command bundle exec kafka foreground restart always other s
  • 更新与更新地点

    我有一个包含很多行的表 我定期想将其中的一列设置为0使用 cron 什么更快 更少的内存消耗 做UPDATE在所有行上 即没有WHERE条款 或做一个UPDATE only WHERE mycolumn 0 正如在原始帖子的评论中注意到的那
  • 在调用者的返回序列中跳过函数

    在一系列函数调用中 例如 main gt A gt B gt C 当被调用函数完成时 它通常返回到调用函数 例如C 返回到B 这将返回到A etc 我想知道是否也可以直接返回到调用序列中较早的函数 所以C 还给main 并跳过B and A
  • C# 字节数组到固定 int 指针

    是否可以以某种方式转换由fixed 语句创建的指针的类型 情况是这样的 我有一个字节数组 我想对其进行迭代 但是我希望将这些值视为 int 从而使用 int 而不是 byte 这是一些示例代码 byte rawdata new byte 1
  • Three.js:如何缩放和偏移图像纹理?

    如何缩放和偏移图像纹理 我的图像尺寸是 1024 像素 x 1024 像素 var textureMap THREE ImageUtils loadTexture texture png 看一下纹理文档 https threejs org
  • 禁用 UICollectionView 中 UIAttachmnetBehavior 的垂直移动

    我尝试在水平 UICollectionView 中模仿消息应用程序弹簧动画 我在 UICollectionViewFlowLayout 子类中使用了 UIAttachmentBehavior 但问题是 当我水平滚动时 单元格也会垂直和水平移
  • 视图之间快速导航的设计建议

    通常 当视图需要大量绑定或某些 UI 元素 例如 Bing 地图 时 需要 一段时间 来加载 例如半秒到一秒 我不希望 点击 操作 例如点击列表框中的元素 和导航操作 显示新页面 之间出现延迟 我不介意逐步显示页面 例如 对于 Bing 地
  • 查找满足条件的向量内的索引

    我正在寻找一个条件 它将返回满足条件的向量的索引 例如 我有一个向量b c 0 1 0 2 0 7 0 9 我想知道 b gt 0 65 的第一个索引 在这种情况下 答案应该是 3 I tried which min subset b b
  • 刷新后保留通过 jquery 动态生成的输入字段

    我正在使用下面的脚本根据需要生成输入字段 但是 刷新或单击返回提交错误页面时 输入的字段和信息会消失 有什么办法可以在点击返回或刷新页面后保留字段吗 document ready function var MaxInputs 67 var
  • 在 TextInput 中实现 @mention

    如何在React Native的TextInput中实现 mention 我试过这个反应本机提及 https github com harshq react native mentions但它不再被维护了 有很多样式问题和回调问题 我想要的