You need to enable JavaScript to run this app. react-native-video-player播放完报flexGrow NaN的Invariant Violation修复
优惠活动
大模型
产品
解决方案
定价
更多

react-native-video-player播放完报flexGrow NaN的Invariant Violation修复

报错根因

这个错误是样式值为NaN时直接传递给原生层触发的合法性校验拦截,触发时机和endWithThumbnail属性强绑定:react-native-video-player在视频播放完成、从播放器视图切换到缩略图静态视图的过程中,内部逻辑没有对计算得到的容器样式做空值兜底,将未成功计算的flexGrow值(类型为NaN)直接传递给底层RCTView组件,最终触发原生层报错。

具体修正方案
  • 给FlatList两列布局下的外层卡片View补上明确的固定宽度,不要完全依赖流式布局的自适应计算。原实现的卡片View仅设置了margin属性,没有明确宽度,会导致组件在切换视图时拿不到准确的父容器尺寸,进而计算出错误的flexGrow值。
  • 给VideoPlayer组件显式传入containerStyle属性,将flexGrow固定设置为合法数字值(比如0),覆盖组件内部的默认空样式逻辑,从根源上避免传递NaN值到原生层。
  • 如果业务不需要播放结束显示缩略图的能力,可暂时移除endWithThumbnail属性,临时规避组件内部的视图切换bug。
  • 调整原有代码的标签嵌套结构,原代码中VideoPlayer的闭合标签位置错位,会导致组件props解析异常,也会间接引发样式计算空值的问题。
修正后的参考代码
<FlatList
  numColumns={2}
  data={this.state.studio}
  renderItem={({item}) => (
    // 外层卡片View补充固定宽度,避免尺寸计算空值
    <View style={{marginTop:10, marginLeft:10, width: Dimensions.get('window').width / 2 - 15}}>
      {item.IsAudio == 1 ? (
        <View>
          <Text>hii</Text>
        </View>
      ) : (
        <View>
          <VideoPlayer
            endWithThumbnail
            video={{uri: `${IMAGE}${item.MediaLink}`}}
            videoWidth={200}
            videoHeight={150}
            resizeMode={'stretch'}
            // 显式固定容器样式,避免flexGrow被计算为NaN
            containerStyle={{flexGrow: 0}}
          />
        </View>
      )}
    </View>
  )}
/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 04:45:06