【Taro】View标签的bug

本人在用taro做日常开发的时候,要求实现一个状态控制按钮显隐的功能,本身以为没什么难度,就日常搬砖而已,没想到遇到这么个问题。

话不多说,直接上代码:

//页面
<View className="btnlist">
    {
        detail.cancelBtn && <View  className="btn">取消订单<View>
    }
    {
        detail.changeTripBtn && <View  className="btn">行程变更<View>
    }
    {
        detail.payBtn && <View className="btn">支付<View>
    }
<View>

//css
.btnlist{
    width:100%;
    height:130px;
    display:flex;
}
.btn{
    flex:1;
    background-color: #f1f4ff;
    color: #4485fe;
}

平平淡淡的功能,当三个按钮都显示时是这样

支付完重新请求详情接口,payBtn状态更新为false ,页面只剩2个按钮,我直接震惊!!!

 WTF???从业这么久,这么简单的代码出这么个问题没遇见过!!

但是作为一个成熟的码农,我们出现bug还是要解决bug的,从视觉上分析了一下,应该是:支付按钮消失,导致另外两个按钮宽度增加,在增加的过程中,丢掉了某些“画面”。

于是我写了个事件来控制支付按钮的显隐,在切换过程中,平均两次出现一次“画面丢失”的问题,通过检查元素查看,发现并没有产生什么额外的干扰导致这种问题,这就有点意思了,按理说元素宽度发生变化,浏览器渲染理应重绘,但是重绘为什么会保留上一次的效果,像卡了一帧在这里一样。

考虑良久,既然是元素宽度发生变化,能不能不影响到文字的那部分,而只是让中间的文字‘挪’一下位置?

于是我将文字用<Text>标签包裹,然后给它加上弹性盒居中,问题解决。。。

//页面
<View className="btnlist">
    {
        detail.cancelBtn && <View className="btn"><Text>取消订单</Text><View>
    }
    {
        detail.changeTripBtn && <View className="btn"><Text>行程变更</Text><View>
    }
    {
        detail.payBtn && <View className="btn"><Text>支付</Text><View>
    }
<View>

//css
.btnlist{
    width:100%;
    height:130px;
    display:flex;
}
.btn{
    flex:1;
    background-color: #f1f4ff;
    color: #4485fe;
    display:flex;
    display: flex;
    justify-content: center;
    align-items: center;
}

但是这个问题的起因是什么我只能猜测是微信小程序的内核在处理flex:1的元素宽度变化的时候会‘忘记’清除上一帧的内容。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值