ArkTS-ArkUI组件-TextInput组件

 一.官方文档

TextInput官方文档,可以参考学习哦。

二.基本语法

TextInput(value?:{placeholder?: ResourceStr, text?: ResourceStr, controller?: TextInputController})

这么多参数是不是看了头大啊 ,我们先来看一下文档里是怎么说的吧!

参数名

参数类型

必填

参数描述

placeholder

ResourceStr

设置无输入时的提示文本。

text

ResourceStr

设置输入框当前的文本内容。当组件设置stateStyles等刷新属性时,建议通过onChange事件将状态变量与文本实时绑定,避免组件刷新时TextArea中的文本内容异常。

controller8+

TextInputController

设置TextInput控制器。

 看了文档是不是就悟了啊!还是得看文档。

接下来我们来看看前面两个参数的使用吧!!!

 placeholder:输入框无输入时的提示信息

TextInput({placeholder: '你想提示的信息'})

 使用起来是不是很简单啊!

 还有个text参数大家是不是都已经猜到怎么用啦!

 text:输入框当前的文本内容

TextInput({text: 'HarmonyOS'})

 是不是特别简单啊,接下来我们看看一些常用的属性吧!

三.属性 

type:输入框类型 

名称

参数类型

描述

type

InputType

设置输入框类型。

默认值:InputType.Normal

 下面我们来仔细看一下参数类型InputType吧:

InputType枚举说明

名称

描述

Normal

基本输入模式。

支持输入数字、字母、下划线、空格、特殊字符。

Password

密码输入模式。支持输入数字、字母、下划线、空格、特殊字符。密码显示小眼睛图标并且默认会将文字变成圆点。

Email

邮箱地址输入模式。支持数字,字母,下划线,以及@字符(只能存在一个@字符)。

Number

纯数字输入模式。

PhoneNumber9+

电话号码输入模式。

支持输入数字、+ 、-、*、#,长度不限。

 是不是看完表格觉得自己已经可以了!!!那我们就简单介绍一下吧(以Password为例)。

password

TextInput({placeholder:'在这里输入哦!'})
  .type(InputType.Password)

 我们来看看最终的样子吧:

是不是隐藏密码一下子规格就上来啦!!! 

点击这个小眼睛图标密码就又显示出来啦!!!

下面我们在来看看其他属性吧!!!

placeholderColor/placeholderFont

名称

参数类型

描述

placeholderColor

ResourceColor

设置placeholder文本颜色。

placeholderFont

Font

设置placeholder文本样式。

这是不是太简单了,不就设置颜色和样式嘛,肯定轻轻松松啊!

那我们来看看吧!!!

怎么回事???为什么颜色没有变啊??? 

让我们再次回去看看文档——》 

 

还记得这是什么吗???——》输入框的提示信息啊,那我们现在有提示信息吗?所以就算颜色发生了改变我们也看不见。。。

看文档要仔细 

作为一个交互的组件,我们如何进行交互知道用户输入了些什么呢??? 

最后我们再来讲一个事件吧!!!

四.事件 

事件:

名称

功能描述

onChange(callback: (value: string) => void)

输入内容发生变化时,触发该回调。

value:输入的文本内容。

触发该事件的条件:

1、键盘输入。

2、粘贴、剪切。

3、键盘快捷键Ctrl+v。

我们直接上实例吧——》 

先来个插曲吧,当箭头函数只有一个参数的情况下可以省略( ),直接写value。

在日志中输出文本框的内容:

TextInput({text: 'H'})
  .backgroundColor(Color.Pink)
  .fontSize(30)
  .margin({top: 300})
  .onChange(value =>{
    console.log(value)

  })

下面我们直接在输入框中输入看看效果吧————》

  onChange状态是不是在线啊

 接下来我们就来看看是如何进行交互的吧:

注意:读取变量使用this.

 将输入框的内容赋给message变量(parseInt()——》转整形),再将message变量作为文本框内容输出。

TextInput({text: this.message.toFixed(0)})————》将输入框初值设置为message。

让我们改变输入框的内容,看看文本框有没有发生改变吧!!! 

改变输入框内容发现文本框也随之一起改变。这就是onChange交互事件——》输入内容发生变化时,触发该回调。

五.语录

坚持就是成功的敲门砖,持之以恒才能看到希望的曙光。

 一天一个小知识,每一个都是通往成功路上的脚印!!!

 

<think>好的,我现在需要帮助用户了解如何在鸿蒙ArkTS中使用List组件实现评论区功能,包括排序、发表评论和点赞。首先,我得回忆一下ArkTS的相关知识,特别是List组件的使用和状态管理。 用户提到的引用内容里有关于ListItem的用法,比如主轴方向、交叉轴布局等,这可能涉及到列表的排列方式。另外,用户交互部分提到了TextInput和Button组件,以及用@State管理状态,这点很重要,因为评论区的动态更新需要状态驱动。 首先,我需要确定如何构建评论列表的结构。引用4中提到ListItem是列表项,可能需要每个评论项包含内容、点赞数和时间戳。然后,排序功能需要根据最新(时间)和最热(点赞数)来排列,这应该通过排序函数来实现,当用户选择排序方式时,触发列表的重新渲染。 发表评论部分,引用1和2提到输入框和内容验证,这里需要处理用户的输入,非空验证,以及回车键提交。可能需要在TextInput组件中添加onSubmit事件,并在处理函数中将新评论添加到列表,同时清空输入框。 点赞功能方面,每个评论项需要有点赞按钮,点击后更新该评论的点赞数。这里应该使用@State或@Link来管理每个评论项的状态,确保点赞数的变化能够触发UI更新。 接下来是具体的实现步骤。首先定义评论的数据结构,包含id、内容、点赞数和时间。然后使用List组件渲染列表项,每个ListItem包含文本内容和点赞按钮。排序功能可以通过按钮切换排序方式,并重新排序数组。发表评论需要绑定输入框的值到@State变量,并在提交时验证非空,然后添加到评论列表。 可能需要用到ArkUI组件,比如Flex布局来排列点赞按钮和内容,以及处理时间戳的显示。引用5中的链接可能提供了ArkTS开发的更多细节,但用户没有提供具体内容,可能需要依赖已有的引用信息。 最后,测试和优化部分,引用3提到的AppAnalyzer工具可以用来检测性能,确保列表滚动和交互流畅,没有响应延迟的问题。这可能涉及到列表项的复用和高效渲染。 现在需要将这些思路整理成结构化的步骤,确保每个部分都涵盖用户的需求,并且引用正确的参考资料。同时,生成相关问题,帮助用户深入理解相关知识点。</think>### 鸿蒙ArkTS List组件实现评论区功能步骤说明 #### 一、数据结构定义 使用`@Observed`和`@ObjectLink`实现评论数据的响应式更新: ```typescript @Observed class Comment { id: string = ''; content: string = ''; likes: number = 0; timestamp: number = Date.now(); } ``` #### 二、列表布局实现 引用`ListItem`组件特性[^4]: ```typescript List({ space: 10 }) { ForEach(this.commentList, (comment: Comment) => { ListItem() { Column() { Text(comment.content) Row() { Text(`${formatTime(comment.timestamp)}`) Button(comment.likes.toString()) .onClick(() => this.handleLike(comment)) } } }.divider({ strokeWidth: 1, color: 0xCCCCCC }) }) } .listDirection(Axis.Vertical) .scrollBar(BarState.Auto) ``` #### 三、排序功能实现 通过`@State`管理排序状态: ```typescript @State sortType: 'newest' | 'hottest' = 'newest'; // 排序方法 getSortedComments() { return [...this.commentList].sort((a, b) => { return this.sortType === 'newest' ? b.timestamp - a.timestamp : b.likes - a.likes; }); } ``` #### 四、评论发布功能 结合引用[1][^1][^2]的输入验证: ```typescript @State inputText: string = ''; TextInput({ placeholder: '输入评论' }) .onChange((value) => this.inputText = value) .onSubmit(() => { if (this.inputText.trim()) { this.commentList.push(new Comment(this.inputText)); this.inputText = ''; } else { showToast('内容不能为空'); } }) ``` #### 五、点赞交互实现 引用状态管理方法[^2]: ```typescript handleLike(comment: Comment) { comment.likes += 1; this.commentList = [...this.commentList]; // 触发更新 } ``` #### 六、性能优化建议 1. 使用`RecycleView`模式优化长列表 2. 通过引用[3][^3]的AppAnalyzer检测滚动帧率 3. 对时间显示使用缓存计算结果: ```typescript @StorageLink('timeCache') cachedTimes = new Map(); ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值