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

React Native开发:drawerContent的props.progress返回undefined问题求助

解决React Native Drawer导航中props.progress返回undefined的问题

看起来你遇到的问题大概率是React Navigation版本差异导致的——很多旧教程用的是React Navigation 5.x,而在6.x版本里,drawerContent的props中已经不再直接提供progress这个动画值了,这就是为什么你拿到的是undefined。

正确的解决方案(React Navigation 6.x)

官方在6.x版本里推荐使用useDrawerProgress钩子来获取抽屉的动画进度,直接替换你之前的useState和setTimeout逻辑就可以了:

  1. 首先导入这个钩子:
import { useDrawerProgress } from '@react-navigation/drawer';
  1. 修改你的组件代码,去掉不必要的state和timeout,直接用钩子获取progress:
const DrawerNavigator = ({route}) =>{
  // 直接用useDrawerProgress获取抽屉动画进度,它本身就是Animated.Value类型
  const progress = useDrawerProgress();

  const scale = Animated.interpolateNode(progress,{
    inputRange : [0,1],
    outputRange : [0,0.8]
  })
  const borderRadius = Animated.interpolateNode(progress,{
    inputRange : [0,1],
    outputRange : [0,25]
  })
  const animatedStyle = {transform:[{scale}]}
  
  return(
    <View style = {styles.mainContainer}>
      <Drawer.Navigator
        initialRouteName = "FableReader"
        screenOptions={{
          headerShown: false,
          drawerStyle : [styles.drawerContainer],
          drawerType : "slide",
          overlayColor : "transparent",
          sceneContainerStyle : [styles.sceneContainer],
        }}
        drawerContent = {()=>{
          // 这里不需要再处理progress了,直接传递需要的props给CustomContent
          return(
            <CustomContent route={route} />
          )
        }}
      >
        <Drawer.Screen name="FableReader">{props => <FableReaderScreen {...props}/>}</Drawer.Screen>
        <Drawer.Screen name="LexiqueFable">{props => <LexiqueScreen {...props}/>}</Drawer.Screen>
        <Drawer.Screen name="QCM">{props => <QCMScreen {...props}/>}</Drawer.Screen>
      </Drawer.Navigator>
    </View>
  )
}

为什么之前的方法失效?

  • 在React Navigation 6.x中,drawerContent的props结构发生了变化,不再包含progress属性,官方把这个功能抽成了独立的钩子useDrawerProgress,让代码更清晰。
  • 你之前用setTimeout来更新state的方式本身就不稳定:动画值是实时变化的,setTimeout只能执行一次,无法跟踪progress的动态更新,而且把Animated.Value存到React state里也不是正确的用法。

如果你还在使用React Navigation 5.x

如果你的项目还停留在5.x版本,那问题可能出在解构props的方式上——你需要明确从drawerContent的props中解构出progress,而不是用...props然后再去取:

drawerContent = ({progress, ...restProps})=>{
  // 这里可以直接使用progress,不需要setTimeout
  setProgress(progress);
  return(
    <CustomContent {...restProps} route={route} />
  )
}

不过还是建议升级到最新的6.x版本,享受更好的API设计和性能优化。

内容的提问来源于stack exchange,提问作者théau zatti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:17:52