Rxjs 如何使用NGRX防止Angular 5中的内容跳转/滚动

Rxjs 如何使用NGRX防止Angular 5中的内容跳转/滚动,rxjs,angular5,ngrx,Rxjs,Angular5,Ngrx,假设我有一个带有表格的长页面(或者正确地说是包含表格的一组容器),这些表格中有大量数据,因此它无法放入屏幕,因此可以使用滚动条滚动页面 现在,我在表的每一行中都有一个复选框,这样我就可以选择一些行并对它们执行一些操作 这些复选框与状态关联,因此当我选中其中一个复选框时,状态将更新,整个页面将重新呈现。如果我理解正确,这会导致意外的内容滚动(跳跃) 所以我的问题是:有没有共同的方法来避免这种意外的行为?我正在考虑将用户交互分离到一个单独的状态,但这感觉有点像是重新发明轮子。还有其他想法或标准方法吗

假设我有一个带有表格的长页面(或者正确地说是包含表格的一组容器),这些表格中有大量数据,因此它无法放入屏幕,因此可以使用滚动条滚动页面

现在,我在表的每一行中都有一个复选框,这样我就可以选择一些行并对它们执行一些操作

这些复选框与状态关联,因此当我选中其中一个复选框时,状态将更新,整个页面将重新呈现。如果我理解正确,这会导致意外的内容滚动(跳跃)


所以我的问题是:有没有共同的方法来避免这种意外的行为?我正在考虑将用户交互分离到一个单独的状态,但这感觉有点像是重新发明轮子。还有其他想法或标准方法吗?

@Simon_Weaver,@user2216584您的评论是正确的:只需添加trackBy以防止Angular重新绘制容器

问题是-当用户勾选复选框时,为什么要重新呈现页面。如果您需要更新表中的数据,为什么不更新您需要更新的值,而不是重新呈现整个页面呢。我只是更新存储状态(我正在做的是不可变的,所以每次用户单击复选框时,我都会在我的reducer中创建一个新状态)由于我在模板中使用了asyncPipe,一旦检测到状态对象中的任何更改,它就会自动重新呈现。您的逻辑是合理的,但浏览器会碍事-它会重新呈现DOM元素,导致ngrx状态得到更新&它会被异步管道拾取。出现滚动,原因是表格无法显示在屏幕上。您可以解决这个问题:不要在模板中使用异步管道,将表数据分配给
.subscribe()方法中的组件变量。然后,当用户勾选复选框但尚未更新ngrx状态时,更新组件表属性(修改对象以防止整个表重新呈现)。仅在
ngondstroy()
中更新ngrx表格属性,或者在您不介意重新启动时更新-render@Exterminator我自己仍在努力解决这个问题。值得注意的是:我注意到Chrome中的移动测试模式有时会跳到真实设备无法跳到的地方。这甚至发生在内容处于固定高度分区时。因此,如果需要移动设备,请确保在真实设备上进行测试。还可以使用
trackBy
来防止容器被重新绘制,或者如果“键”相同,则防止容器被重新初始化@托帕斯,虽然我还是迟到了-你探索过trackBy吗。即使新数据来自ngrx存储,它也将避免重新渲染。