Можно ли сохранить в качестве свойства окна ссылку на объект ref, возвращенный из крючка useRef?

#reactjs

Вопрос:

В моем приложении React у меня есть фиксированная панель навигации и прокручиваемый div. Прокручиваемый div содержит все содержимое приложения.

Я хочу прокрутить представление в некоторых местах, но если я использую window.scrollTo его, он не работает, так как прокручиваемый элемент-это div. Я придумал решение, которое заключается в том, чтобы назначить ссылку с useRef помощью крючка и сохранить эту ссылку как свойство окна. Затем, когда мне это нужно, я просто делаю window.ref?.current?.scrollTo и выполняю свою работу.

Вопрос в том, можно ли это сделать? Нарушает ли это какие-либо из правил крючков? Я знаю о существовании forwardRef , но действительно ли это необходимо здесь?

Также обратите внимание, что элемент, запускающий прокрутку, не является прямым потомком этого div, поэтому мне пришлось бы использовать forwardRef много раз.

Комментарии:

1. Вероятно, было бы лучше использовать контекст React для хранения значения ref и предоставления его обратно в приложение. «Это нормально-спасать глобалы?» Это может быть, если вы знаете, что делаете, но это обычно считается анти-шаблоном, и его следует избегать, если это возможно.

2. Не могли бы вы привести пример? Я проверил документы reactjs.org/docs/hooks-reference.html#usecontext и как приложение, так и кнопка темы должны иметь доступ ThemeContext . Итак, если, как в моем случае, они находятся в разных файлах, как я могу ThemeContext установить ссылку, созданную внутри приложения, и передать ее в ThemedButton (дочерний компонент)

3. reactjs.org/docs/context.html API контекста React-это не то же самое, что крючки React, они решаются для разных вариантов использования.