文档开发者中心
我的
|

HarmonyOS 5

TextInput 设置默认输入文本时异常触发 onChange

已解决
收起
自动换行
深色代码主题
复制
@Entry
@Component
struct Index {
    private itemEdited: boolean = false;

    build() {
        Column() {
            TextInput({ text: '默认文本' })
                .onChange(() => {
                    this.itemEdited = true; 
                    console.log('Input changed');
                })
        }
    }

    aboutToAppear() {
        console.log('About to appear');
        this.itemEdited = false;
    }
    
    onPageShow() {
        console.log('Page appear');
        this.itemEdited = false;
    }
}

如上述代码所示,编写过程中发现如果为 TextInput 设置默认文本(而不是留空让用户输入),会触发 onChange 事件调用关联的函数。
并且这个 onChange 事件触发的位置十分奇怪,会在 aboutToAppear() 和 onPageShow() 之后触发,以至于我没办法在后两个事件中将 this.itemEdited 改回 false。

收起
自动换行
深色代码主题
复制
11-06 21:47:37.867 32396-12308 A0c0d0/JSAPP I About to appear
11-06 21:47:37.868 32396-12308 A0c0d0/JSAPP I Page appear
11-06 21:47:38.099 32396-12308 A0c0d0/JSAPP I Input changed

该如何避免这个问题?

点赞
1
收藏
回复
8
分享
举报
浏览365 编辑于2024-11-06 13:48广东
全部评论
最多点赞
最新发布
最早发布
|
采纳答复

onchange,默认值也是有变化,必然会触发该事件。

然后你说的 aboutToAppear() 和 onPageShow() 先执行,这个你可以看一下生命周期,页面渲染就会执行该方法,所以在onchage前面,一点都不奇怪,当前的现象本身没有任何问题,你这种情况下应该试着修改你的代码逻辑

3
3楼回复于2024-11-07 02:02 来自广东
  • LKY
    那有什么别的办法吗,我确实是想不到怎么解决了
    2024-11-07 06:08 来自广东
  • 进击的像素回复LKY
    onchange里加一个if判断一下 非默认值的时候走下面逻辑。是默认值不会修改itemEdited ,依然为false
    2024-11-07 08:01 来自广东
  • LKY回复进击的像素
    嗯,看来只能这样了,谢谢
    2024-11-07 08:48 来自广东
1
2楼回复于2024-11-07 01:20 来自河南
  • LKY
    文档里面没提 onChange 会在设置初始值时触发啊
    2024-11-07 01:53 来自广东

默认值用变量存储。

@State txt:string='默认文本'

TextInput({ text: this.txt })

1
1楼回复于2024-11-06 23:59 来自贵州
  • LKY
    一样的,我用 @Link @State 都试过了
    2024-11-07 00:42 来自广东
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要提问题

了解社区公约,与您携手共创和谐专业的开发者社区。