react-native ios中部分版本不能输入中文的解决办法----------小白的天堂

在同一个项目中好多用到了 TextInput 组件,但是都没有问题,突然有一天给一个TextInput加上了defaultValue属性后中文居然无法输入了!!!,撤销回去又可以输入了,然后试了一下value属性也是不行,同样无法输入,这是怎么回事???

于是baidu了一下问题所在,按照网上的教程配置了一下:

shouldComponentUpdate (nextProps){

        return Platform.OS !== 'ios'

            || (this.props.value === nextProps.value && (nextProps.defaultValue == undefined || nextProps.defaultValue == '' ))

            || (this.props.defaultValue === nextProps.defaultValue && (nextProps.value == undefined || nextProps.value == '' ));

}

这是网上给的方法,那好,拿过来试试吧!万事准备齐全,那就干吧,项目启动,怀着忐忑的心情试了一下,结果非常不幸,居然不管用!!!这是为什么???

没办法,既然网上的教程不管用,那就自己找找原因:

  1. 把defaultValue或者value删除,确定能输入中文,没问题
  2. 添加上defaultValue或者value后不能输入中文
  3. 先前是这样写的defaultValue={this.state.text},换一下思路,直接把this.state.text替换掉,改成defaultValue={‘测试’},运行项目,输入框出现‘测试’字样,然后切换成中文输入法,打字,咦,居然成功了!!!成功了!!!哇什么原理???
  4. 既然直接写死可以,也就是在使用 this.state.text的时候不行(什么原理暂时还没研究),那就好办了

直接上解决办法:

定义全局变量 this.text =‘’;修改defaultValue={this.text},然后在需要给输入框赋值的函数中使用this.text=‘你要赋值的内容’;

这样还不行,因为这样没有render 所以页面不会刷新,this.text的值也不会出现在页面上,只需要在this.text=‘你要赋值的内容’下边加上this.setState={xxxx:xxxx},就可以了

做完一切测试一下,完全可以了。在此记录一下,也分享给有此问题的朋友

在使用网上的那种方法可行的基础上测试了一下,这种方法也是可以的。

有问题欢迎留言,本人看到及时回复!!!谢谢

注:

shouldComponentUpdate (nextProps){

        return Platform.OS !== 'ios'

            || (this.props.value === nextProps.value && (nextProps.defaultValue == undefined || nextProps.defaultValue == '' ))

            || (this.props.defaultValue === nextProps.defaultValue && (nextProps.value == undefined || nextProps.value == '' ));

}

换成下边这种操作就可以使用了:

shouldComponentUpdate(nextProps, nextState) {
        if (Platform.OS === 'ios') {
            if (this.state.text!== nextState.text) {      //text为所要获得的TextInput输入值,
                return false;
            }
        }
        return true;
 };

不过这时候也有个小问题:附图:

历史记录的这种情况,点击历史记录中的选项时,需要点击两次,才能输入到TextInput中

有问题欢迎留言,本人看到及时回复!!!谢谢

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_386605092

为了给小编点动力,客官您可以的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值