Я создаю веб-сайт React с элементами управления пакетом fluentui / react-nothstar . Ниже вы можете найти упрощенный пример Text + Button. Мой сценарий - получить доступ к текстовому элементу управления при нажатии кнопки. Мне нужно что-то вроде document.findElementById, которое работает через refs в React. Он отлично работает для элементов управления компонентами (который расширяет React.Component), но не работает для компонентов Northstar с ошибкой:
Warning: Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?
Основываясь на деталях предупреждения и определении элемента управления Text, похоже, что это функциональный компонент, и я должен использовать React forwardRef, чтобы получить доступ к его свойствам. Я пробовал несколько способов сделать это здесь, здесь и здесь, но не удалось.
import React from 'react';
import {
Text,
Button,
}
from '@fluentui/react-northstar';
class Welcome extends React.Component {
private textRef: any = React.createRef();
private doJob1() {
console.log("doJob1 executed");
console.log(this.textRef.current); // returns null
}
render() {
return (
<div>
<div>Welcome</div>
<div>
<Text
ref={this.textRef}
content="My fancy text control" />
<Button
onClick={this.doJob1.bind(this)}
content="My fancy button" />
</div>
</div>
);
}
}
export default Welcome;
В большинстве случаев я могу избежать прямого доступа к элементам, используя реквизиты и состояние, но в некоторых случаях мне все еще нужна ссылка на компонент (изменение фокуса, открытие диалогового окна, значения обновления, не определенные в моем состоянии).
Как правильно получить доступ к элементу управления Text в обработчике нажатия кнопки в приведенном выше примере?