You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native升级后List.Accordion内TextInput无法点击求助

解决方案

1. 移除left属性中View的无效onPress并替换为可触摸组件

你在List.Accordion的left回调里给普通View添加了onPress,但View本身不原生支持触摸事件,在RN 0.7x版本中,这种写法可能会意外拦截内部TextInput的触摸事件。如果需要点击该区域触发折叠逻辑,建议用TouchableOpacity替代View,同时确保TextInput的事件能正常传递:

left={() => (
  <TouchableOpacity onPress={async () => await closeOthersAccordions()}>
    <Controller
      control={control}
      render={({ field: { onChange, onBlur, value } }) => (
        <TextInput
          // 保留原有属性
          onTouchStart={async (e) => {
            e.stopPropagation(); // 阻止事件冒泡到外层TouchableOpacity和Accordion
            if (!renderItem?.editable) setEnableAutomaticScroll(false);
            else setEnableAutomaticScroll(true);
            await closeOthersAccordions();
          }}
        />
      )}
      // 保留原有Controller属性
    />
    {/* 错误提示文本 */}
  </TouchableOpacity>
)}

2. 阻止TextInput的触摸事件冒泡到Accordion

即使替换了组件,点击TextInput时事件仍可能冒泡到List.Accordion的onPress,导致焦点被抢占。在TextInput的onTouchStart、onFocus中添加事件停止传播逻辑:

<TextInput
  // 其他属性
  onTouchStart={async (e) => {
    e.stopPropagation(); // 关键:阻止事件向上传递
    if (!renderItem?.editable) setEnableAutomaticScroll(false);
    else setEnableAutomaticScroll(true);
    await closeOthersAccordions();
  }}
  onFocus={async (e) => {
    e.stopPropagation();
    setEnableAutomaticScroll(true);
    await closeOthersAccordions();
  }}
/>

3. 显式设置TextInput的pointerEvents

如果上述方法无效,强制给TextInput设置pointerEvents='auto',确保它能优先接收触摸事件:

<TextInput
  pointerEvents='auto'
  // 其他属性
/>

4. 检查样式覆盖问题

元素检查器显示只能选中TextInput上方的View,可能是样式中的z-index、position导致TextInput被上层组件遮挡。检查stylesList.listAccordion、stylesList.textInput的样式配置,确保TextInput的层级更高:

textInput: {
  // 其他样式
  zIndex: 10,
  position: 'relative',
}

5. 调整TextInput在Accordion中的位置

List.Accordion的onPress会响应整个头部区域的点击,新版本RN可能优先处理Accordion的点击事件。可以尝试将TextInput移出left属性,放在Accordion的title或自定义头部容器中,从根源避免事件冲突。


内容的提问来源于stack exchange,提问作者simsinas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 04:30:02