まず、参照を使用してはならないことを理解していると言うことから始めましょう。
そうは言っても、私のシナリオではそれは非常に有効だと思います。具体的には、window.onscroll ハンドラーを使用しており、onscroll ハンドラーの小道具を単純に変更することはできません。onscroll ハンドラーで状態または props を変更すると、子コンポーネントが頻繁に再レンダリングされ、遅延が非常に大きくなります。
したがって、私のシナリオでは、スクロール時に要素のスタイルを設定するだけでよいため (つまり、ページがスクロールされて表示されなくなったときにページの上部に何かを貼り付けます)、設定するだけでラグが0になりますthis.refs.myelement.style.position = 'fixed'
私の問題は、私が現在行っていることです:
this.refs.childelement.refs.childschildelement.refs.childschildschildselement.refs.style.position = 'fixed'
基本的に、onscroll handler
スタイルを設定したい実際の要素に対して 3 人の親が反対しています。
マイページはList
コンポーネントで構成されています。これはReadOnlyOrEditable
コンポーネントで構成されています。編集可能なコンポーネントはRichTextEditors
、Component を持つものToolbar
です。Toolbar
ウィンドウスクロールイベントが発生したときに位置を固定する必要があるのはこれです。
したがって、ページには約 10 個ReadOnlyOrEditable
のコンポーネントがあり、そのうち 5 個がRichTextEditors
で、それぞれがToolbar
.
ツールバーには、斜体、太字などのボタンがあります。
ユーザーが下にスクロールしたときに、ツールバーが表示されなくなった場合にユーザーが上にスクロールする必要がないようにします。つまり、ツールバーが表示されなくなった場合に固定される位置を設定して、ユーザーが斜体/太字/などをすぐに押すことができるようにします。
では、上から下に参照を渡すことなく、これをより良くするにはどうすればよいでしょうか? 私が今持っている方法は非常に醜いです...
各 Toolbar コンポーネントに window.onscroll ハンドラーがあるということは、複数の window.scroll ハンドラーを設定していることを意味するため、onscroll ハンドラーをリストの場所の近くに保持することを好みます。これは、ブラウザーでの不要な作業です。
どんな提案でも大歓迎です。