首先让我说我理解你永远不应该使用 refs。
话虽如此,我认为在我的情况下这是非常有效的。具体来说,我使用的是 window.onscroll 处理程序,不能简单地更改 onscroll 处理程序中的道具。在 onscroll 处理程序中更改状态或道具会过于频繁地重新呈现子组件,这会导致过多的延迟。
因此,由于我的场景只需要在滚动时设置元素的样式(即,当页面滚动到视图之外时,我会在页面顶部粘贴一些东西),因此只需设置即可获得 0 延迟this.refs.myelement.style.position = 'fixed'
我的问题是我目前正在做:
this.refs.childelement.refs.childschildelement.refs.childschildschildselement.refs.style.position = 'fixed'
基本上,我的onscroll handler
3 位父母都对我想要设计的实际元素提出了意见。
我的页面由一个List
组件组成。这由ReadOnlyOrEditable
组件组成。可编辑组件是RichTextEditors
具有组件的Toolbar
组件。当窗口滚动事件发生时Toolbar
,我需要将位置设置为固定。
因此,在一个页面上,我将有大约 10 个ReadOnlyOrEditable
组件,其中可能有 5 个是RichTextEditors
,每个组件都有一个Toolbar
.
工具栏有斜体、粗体等按钮。
当用户向下滚动时,如果工具栏消失,我们不希望用户必须向上滚动。也就是说,如果工具栏不在视野范围内,我们希望将位置设置为固定,以便用户可以立即点击斜体/粗体/等。
那么如何在不必自上而下传递 refs 的情况下让它变得更好呢?我现在拥有它的方式非常丑陋......
我更喜欢让 onscroll 处理程序靠近列表的位置,因为在每个 Toolbar 组件中都有 window.onscroll 处理程序意味着我正在设置多个 window.scroll 处理程序,这在浏览器上是不必要的工作。
欢迎任何建议。