为什么向子组件传递的ScrollView ref类型无法被识别?
问题原因
报错核心是你混淆了useRef返回的ref容器对象和ref指向的ScrollView实例的类型:useRef返回的是React.RefObject<T>类型的容器,本身只有current属性存真实的实例,你给子组件定义的Props要求直接传入ScrollView实例,自然会出现类型不匹配的报错。同时你完全不需要自定义scrollViewProps类型,React Native自带的ScrollView类型已经完整包含scrollTo等方法的定义,你之前访问current报错是因为类型书写错误,和RN内置类型无关。
修复步骤
1. 修改父组件ref定义
把原来错误的ref类型定义替换为以下写法即可:
const scrollViewRef = useRef<ScrollView>(null);
useRef会自动将返回值包装为React.RefObject<ScrollView>类型,自带current属性,不需要额外做交叉类型拼接。
2. 修改子组件Props类型定义
直接用你注释里标注的正确写法,明确接收的是ref容器对象:
interface Props { scrollViewRef: React.RefObject<ScrollView> }
3. 简化子组件调用逻辑
可选链?.已经自动做了空值判断,不需要额外加if (scrollViewRef.current)判断,直接写下面的代码即可正常触发滚动:
scrollViewRef.current?.scrollTo({ y: 0, animated: true });
内容的提问来源于stack exchange,提问作者Fotios Tsakiris
相关产品推荐
相关产品推荐

