scheduleRender() 在滚动/布局事件附近的状态更新后有时会丢弃下一个渲染步骤
□ 标题 “ 排程Render( ) ” 有时在滚动/ 显示事件紧跟之后的状态更新后, 将下一个渲染通过 。
□ 总结
State Confectent.set State ()' (valdi core/src/Component.ts')正确更新了this.state',并呼号this.cheduleRender ()',但在网络目标中,cheduleRender ()'的呼号偶尔从未导致相应的onrender ()'引用。 组件的基本状态(以及由此而来的任何事物,例如同名的本地Storage写作)是正确的,但渲染的输出并不正确——它继续显示任何上作的画作. 其后的`set State ()'要求从所制造道具/闭塞的 Stale 计算出相同的成分,而不是真实的目前状态,使问题更加复杂。
我们用一个下游应用软件(pattern website')在PatternStepInput ' 组件中将这个软件放在一个同样驱动卷轴视图的页面(ScrollViewHandler'/Subscreen')下接了几个关卡。 我们能够可靠地复制并追踪到制造器,但未能使排程器/内接器本身产生活性,因为该代码生活在应用程序回波外的 " valdi core " 中。
□ 环境
- 目标:网络(Webpack dev服务器,`npm run dev')
- " valdi-core " -- -- 通过`archive-override ' 被钉入 " Snapchat/Valdi " @8776dbd68e369efb168deb7688f10ddddde8cb121 " 。
- 在Chrome(桌面)复制,既通过现场会议,又通过`read console messages'日志捕获
□ 范围:确认为只使用网络,未经测试的本地 下面的一切都被复制出来,并完全用在网络目标上。 我们没有测试过iOS或Android,所以我们不能说这是针对网络的集成问题(例如浏览器-DOM卷轴路径中的东西,还是网络"ScrollViewHandler"适配器中的东西),还是跨平台"valdi core"渲染调度器本身中的一个bug,本地目标将共享. 如果调度器是罪魁祸首,本地平台可能需要自己的卷轴/放出相邻的触发器来浮出水面,所以没有本地人的报告并不能排除.
□ 重现步骤
- 将叶片部分(
PatternStepInput ' )完全由祖先(PatternKnitBlock ' )的道具(`viewModel.value ' )驱动的 " 立体组件 " 子树向上若干级,放在可滚动容器内。 - 在叶子上触发一个叫 " vm.onChange(下个) " 的编辑,它同步地叫 " This.setstate({ [field: rounded }) " 。
- 在此首编辑之后,立即进行页面回流(下面的指令文本会重新计算长度)和滚动视图自动调整位置(~200px,滚动到视图样式).
- 触发一个秒 编辑在同一叶子组件上(例如再次点击"+"步骤按钮)不久后。
- 观察:第二次编辑的计算值取自第1步(编辑前)所显示的值,而不是第1步实际承诺的值——即叶子的'onRender()'在两次编辑之间从未被调用,尽管祖先的`This.state'两次变化都是正确的。
□ 预期 . . . . . . .
内容来源: Snapchat/Valdi