React-Native踩坑历险记之TextInput首次聚焦失焦问题

前言 

        这两天被一个问题深深困扰,就是每次组件重新渲染后,在文本框进行聚焦的时候,第一次聚焦总是聚焦后迅速失焦,键盘弹出又弹回,之后就正常。一开始考虑到重新渲染的问题,逐一排查了每个state状态,发现并非状态问题,经过不断简化代码,最后确诊了问题:PagerView列表渲染导致

我的简化代码如下,在这种列表渲染的情况下出现了组件加载后首次聚焦自动失焦问题

    <PagerView
      style={{ flex: 1, backgroundColor: 'black' }}
      orientation={'vertical'}
      scrollEnabled={true}
      initialPage={0}
    >
      {videos.map((el, index) => (
        <View style={{flex:1}}>
      <TextInput placeholder='请输入内容' style={{backgroundColor:'white',position:'absolute',bottom:0,width:'100%',height:hp(10)}}></TextInput>
      </View>
      ))}
      
    </PagerView>

 

TextInput焦点正常运作的代码如下

<PagerView
      style={{ flex: 1, backgroundColor: 'black' }}
      orientation={'vertical'}
      scrollEnabled={true}
      initialPage={0}
      onPageSelected={onPageSelected}
    >
      <View style={{flex:1}}>
          <TextInput placeholder='你好呀' style={{backgroundColor:'white',position:'absolute',bottom:0,width:'100%',height:hp(10)}}></TextInput>
      </View>
      
    </PagerView>

总结

PagerView在进行列表循环的时候会引起焦点错乱问题,不适合需要进行焦点管理的应用场景,如评论区。

题外话

        其实,PagerView是一个比较不错的书写短视频应用的标签,奈何与TextInput的焦点管理不太兼容。如果有对应的解决方案,可以与我深入交流洽谈

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值