Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mpvue使用中几个头疼的bug #316

Closed
TJ-XiaJiaHao opened this issue Apr 19, 2018 · 13 comments
Closed

mpvue使用中几个头疼的bug #316

TJ-XiaJiaHao opened this issue Apr 19, 2018 · 13 comments
Labels
wontfix This will not be worked on

Comments

@TJ-XiaJiaHao
Copy link

  1. 组件渲染是串行的,而原生的是并行的。假设一个页面中用到了5个A组件,一个组件渲染时间大约为100毫秒,那么在原生中所有组件渲染完成约为100毫秒(并行渲染),而在mpvue中则需要约为500毫秒(串行渲染)。

  2. 当动态绑定一个数据时,某些情况下即使该数据没有发生变化,也会被刷新(感觉像是mpvue不断地在赋值)。如下面是一个简单的slider,想要在拖动的时候实时修改标题,但是会不断地重新赋值为chapterIndex的值,就会出现回弹的bug,而且松手后的value不是最新的value,而是chapterIndex(下面注释部分为解决方案)。scroll-view如果动态绑定scrolltop也有同样的问题,input如果动态绑定value也会有同样的问题。

// 假设现在chapterIndex为0,slider最大为10
<slider :value="chapterIndex"
          @changing="sliderChooseChaptering"
          @change="sliderChooseChaptered">
          

// 拖动slider到5处
sliderChooseChaptering(e) {
    // this.chapterIndex = undefined;       // 通过设置为undefined可以避免滚动条回退
    this.toolbarTitle = 'new title';      // 改动了标题变量,但是slider会被重新赋值,小圆点回退到0处
},
          
sliderChooseChaptered(e) {
    let chapterIndex = e.mp.detail.value;
    console.log(chapterIndex);            // 值为0,而不是5
    // this.chapterIndex = chapterIndex;    // 重新赋值
}
  1. scroll-view中无法监听到垂直的touchmove
<scroll-view style="height:100rpx" scroll-y @touchstart="tstart" @touchend="tend" @touchmove="tmove">
  <div style="height: 200rpx">我就想监听到垂直的move</div>
</scroll-view>
 

tstart() {
  console.log('tstart');        // 总是执行
},
tend() {
  console.log('tend');        // 总是执行
},
tmove() {
  console.log('tmove');        // 横向拖动时执行,垂直拖动时不执行
},

说明:第二个问题会导致很多问题,比如输入框动态赋值,scroll-view动态绑定scroll-top,slider动态绑定数值,都会出现回退现象,即使动态绑定的值也实时更新,也会出现闪烁的现象,体验比较差。

@CXY037
Copy link

CXY037 commented Apr 19, 2018

input 问题发现了

@nervouself
Copy link

nervouself commented Apr 19, 2018

假如将题主的代码改成

sliderChooseChaptering(e) {
    this.toolbarTitle = Math.random(); 
}

除了会发生题主所说的问题之外,在安卓机上(骁龙801的机器,非山寨机)会发生在拖动过程中画面中 toolbarTitle 变换的很迟缓,快速滑动几下以后手指停住, toolbarTitle 还是在继续缓慢的变化,感觉是滑动中触发的事件被推入一个数组然后每隔几十毫秒执行一个,慢慢消费,导致手指停住还没消费完的感觉。不仅仅是 slider 的滑动事件触发,包括 scroll-view 的 scroll 事件频繁触发也会导致类似的情况。

@seawenzhu
Copy link

up up up

1 similar comment
@lanshengzhong
Copy link

up up up

@bigmeow
Copy link

bigmeow commented Apr 25, 2018

@nervouself MPVUE源码中 setData的最快频率是50ms,做了函数节流

@mdsb100
Copy link

mdsb100 commented Apr 26, 2018

其实这个可以参考 wepy吧。 做一个this.$apply()。让用户可选的去渲染。

@nervouself
Copy link

nervouself commented Apr 26, 2018

@bigmeow 之前已经看过了源码,觉得这应该不是节流的问题,节流不会出现手指已经已离开而数据还会持续再变化一段时间的情况吧?

@zhuweiyou
Copy link

zhuweiyou commented May 29, 2018

同样遇到这个问题,改变了别的值,导致 :scroll-into-view 也被重新触发了,自动就滚到顶部去了

@lemonpigpig
Copy link

不打算用mpvue了,如果这些问题不解决,很莫名其妙,一个数据变化就序列化所有的,

@zhuanglong
Copy link

解决了吗

@4tj
Copy link

4tj commented Aug 8, 2018

@TJ-XiaJiaHao 建议的复制value为undefined的确有效,但是又需要value作为页码,怎么都绕不过

已经打算退坑

@mdsb100
Copy link

mdsb100 commented Aug 8, 2018

@qinshou 你可以选择混写啊

@mpvue-bot mpvue-bot bot added the wontfix This will not be worked on label Oct 23, 2018
@mpvue-bot
Copy link

mpvue-bot bot commented Oct 23, 2018

issue超过30天无更新或响应,7天后将自动关闭,如果问题状态有更新请及时更新issue

@mpvue-bot mpvue-bot bot closed this as completed Oct 30, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
wontfix This will not be worked on
Projects
None yet
Development

No branches or pull requests