React 前端导航

Rax 移动端开发钉钉小程序 IOS 输入卡住,光标消失问题记录

Rax 移动端开发钉钉小程序 IOS 无法输入中文,光标消失问题记录

使用 Rax 框架开发企业内部钉钉小程序应用,实现表单输入时再正常不过的需求,这里我用到的是 fusion mobile 组件库及一些基础组件来构建我们的应用,在实现获取用户输入使用的是 Input 组件实现(文档地址:https://rax.js.org/docs/components/meet-input),这个Input组件支持单行和多行输入,可以应对大部分的应用场景。在安卓端是没有问题的,但是到了移动端会出现输入光标消失,输入文本获取不到,看上去像是卡住了一下,这肯定是不能接受的,这里记录探索解决 IOS 输入卡住问题的过程。

1.尝试启用 composition

这是去 fusion mobile 社区里问到的解决办法,但是试了一下不太好用,问题没有解决,示例代码如下:

import {createElement,useRef,useState} from "rax";
import {Input} from "@alifd/meet";

export default ()=>{
    const inputChinese = useRef(false);
    const [val,setValue] = useState()
    return <Input
        value={val}
        onCompositionStart={()=>{
            inputChinese.current = true;
        }}
        onCompositionEnd={(e)=>{
            inputChinese.current = false;
            setVal(e.target.value);
        }}
    />
}

2.替换 rax-textinput 组件,使用非受控组件(受控组件依然是有问题的)

这是一个社区里的大佬使用的方案,直接借鉴过来用,结合第一步的操作,就是换了组件而已,但是虽然能用了,但是小问题很多,有些要求都不能实现,比如多行输入时不能自适应输入框的高度显示全部内容,因此也没有单纯的使用这种方式。

示例代码如下:

import {createElement,useRef} from "rax";
import TextInput from "rax-textinput";

export default ()=>{
    const inputChinese = useRef(false);
    const valueRef = useRef();
    return <TextInput
        value={valueRef.current}
        onCompositionStart={()=>{
            inputChinese.current = true;
        }}
        onCompositionEnd={(e)=>{
            inputChinese.current = false;
            valueRef.current = e.target.value;
        }}
    />
}

3.最终方案:替换钉钉小程序原生组件 textarea,依然使用非受控组件(受控组件问题依然存在),可以不启用 composition 或者使用受控组件并禁用 native,即设置 enableNative={false}

示例代码如下:

import {createElement,useRef,useState} from "rax";
import TextInput from "rax-textinput";

export default ()=>{
    const inputChinese = useRef(false);
    const valueRef = useRef();
    return <TextInput
        value={valueRef.current}
        onCompositionEnd={(e)=>{
            valueRef.current = e.target.value;
        }}
    />
}

总结

无论是哪种输入框,只要是受控组件都会有问题,只能使用非受控组件。
非受控组件的话可以使用原生的小程序 textarea 组件或者 rax-textinput 组件,单行文本可以使用rax-textinput,多行文本的话则使用原生的 textarea 组件。

声明:本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。邮箱:farmerlzj@163.com。 本站原创内容未经允许不得转载,或转载时需注明出处: 内容转载自: React前端网:https://qianduan.shop/blogs/detail/52

#Rax#mobile#IOS#无法输入中文

相关推荐

跨端开发框架 Rax 中的路由跳转

简单减少 Rax 中提供的各种路由跳转方式,以及推荐路由的跳转方式

在浏览器及 Rax 中实现吸顶效果,position sticky 属性的应用及监听页面滚动(React)实现吸顶效果

最近遇到了移动端小程序需要实现吸顶效果的需求,就是 tab 页抬头滑动到页面顶部时需要固定到页面的顶部不再滚动。这里介绍两种实现方式,当然这两种方式在浏览器同样适用,以下思路仅供参考,实际效果以实际操作为准