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

React-native-google-places-autocomplete在ScrollView中报VirtualizedLists嵌套错误如何解决

问题原因

报错是因为GooglePlacesAutocomplete组件的下拉搜索结果内部默认用了VirtualizedList实现,和外层同方向的普通ScrollView嵌套后触发了React Native的嵌套滚动限制,官方建议的keyboardShouldPersistTaps只解决点击响应问题,无法消除滚动嵌套冲突。

可行解决方案

方案1:禁用内部列表滚动(最常用,适配绝大多数场景)

给GooglePlacesAutocomplete添加disableScroll属性,关闭内部列表的滚动能力,所有滚动逻辑交由外层ScrollView处理,直接消除冲突。
修改后的GooglePlacesInput组件代码如下:

import React from 'react';
import { GooglePlacesAutocomplete } from 'react-native-google-places-autocomplete';
export const GooglePlacesInput = () => {
  return (  
    <GooglePlacesAutocomplete
      placeholder='Search'
      disableScroll={true} // 新增这行,关闭内部VirtualizedList滚动
      listViewProps={{
        keyboardShouldPersistTaps: 'handled' // 内部列表添加点击响应配置
      }}
      onPress={(data, details = null) => {
        console.log(data, details);
      }}
      query={{
        key: 'my Key',
        language: 'en',
      }}
    />
  );
};

原有外层的ScrollView代码无需额外修改,即可正常运行。

方案2:开启嵌套滚动支持

如果你需要保留GooglePlacesAutocomplete内部下拉列表的独立滚动能力,给外层ScrollView添加nestedScrollEnabled属性即可,React Native 0.68及以上版本全平台支持该属性:
修改后的外层页面代码如下:

export const IznajmiScreen = () => ( 
  <>
  <IznajmiListContainer>
    <ScrollView 
      keyboardShouldPersistTaps={'handled'} 
      nestedScrollEnabled={true} // 新增这行,开启同方向嵌套滚动支持
    >
      <TextInput style={styles.input} placeholder="Naslov" /> 
      <MyDatePickerStart/>
      <MyDatePickerEnd/>
      <GooglePlacesInput/>
      </ScrollView>
  </IznajmiListContainer>
  </>
)

两种方案任选其一即可消除报错,组件可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:24:04