ReactNative报错Cannot add a child that doesn't have a YogaNode to a parent without a measure function!

先说结论:react-native做的APP在Android真机上跑时,可能会出现各种异常崩溃导致APP崩掉,或者控制台报错,我最常碰到的4种情况如下:

(1)不能将文本放到View组件中,而应放在Text组件里

(2)使用array.length && array,map((item, index) => { return <View></View> }) // 使用&&导致的报错

(3)由于保存格式化工具自动在结尾增加分号";"或者人为手动失误增加的标点符号导致的编译报错

(4)将不该属于某个RN组件的属性比如style中的某个属性给了TouchableOpacity组件,那么控制台就会报红色错误

 

 今天在android机上测试react-native做的App,出现了这个报错:

è¿éåå¾çæè¿°

 

经过一段一段的代码测试,找出了问题的原因,下面贴代码

原代码:

 

<View style={[styles.row, { marginTop: 10, marginBottom: 6 }]}>

                {/* 客户等级标签 */}

                {

                  overview && overview.custLevel ? <View style={styles.labelWrap}>

                    <Text style={{ fontSize: 12, color: 'white', alignItems: 'center', }}>{overview.custLevel + '级'}</Text>

                  </View> : null

                }

 

                {/* 事实/潜在客户标签 */}

                {

                  overview && overview.sourceType ? <View style={styles.labelWrap}>

                    <Text style={{ fontSize: 12, color: 'white', alignItems: 'center', }}>{dictKeyToValue(overview.sourceType, 'CUSTOMER_TYPE')}</Text>

                  </View> : null

                }

 

                {

                  labels.length && labels.map((item, index) => {

                    return (<View key={index} style={styles.labelWrap}>

                      <Text style={{ fontSize: 12, color: 'white', alignItems: 'center', }}>{item.value}</Text>

                    </View>)

                  }) 

                }

              </View>

修复后的代码:

<View style={[styles.row, { marginTop: 10, marginBottom: 6 }]}>

                {/* 客户等级标签 */}

                {

                  overview && overview.custLevel ? <View style={styles.labelWrap}>

                    <Text style={{ fontSize: 12, color: 'white', alignItems: 'center', }}>{overview.custLevel + '级'}</Text>

                  </View> : null

                }

 

                {/* 事实/潜在客户标签 */}

                {

                  overview && overview.sourceType ? <View style={styles.labelWrap}>

                    <Text style={{ fontSize: 12, color: 'white', alignItems: 'center', }}>{dictKeyToValue(overview.sourceType, 'CUSTOMER_TYPE')}</Text>

                  </View> : null

                }

 

                {

                  labels.length ? labels.map((item, index) => {

                    return (<View key={index} style={styles.labelWrap}>

                      <Text style={{ fontSize: 12, color: 'white', alignItems: 'center', }}>{item.value}</Text>

                    </View>)

                  }) : null

                }

              </View>

 

从原代码看,好像也没问题,对不对?

不过,就是报错,使用三元运算符替代,就不报错了 ,在F12的console输出测试 1 && [1,2,3].map(it=>it)  // 返回了[1,2,3]没毛病啊,经过分析,觉得原因最可能出在react-native的语法解析上。。。

不可以使用()包裹,代码如下: 

{showCount && (

          <TouchableOpacity activeOpacity={0.88} onPress={onPress}>

            <View style={styles.flexRow}>

              <Text style={styles.countNum}>

                {/* 共计 */}

                {countString}

              </Text>

              <IconView type={'\uf604'} size={15} color={OAColor.descText} />

            </View>

          </TouchableOpacity>

        )}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hzxOnlineOk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值