Проблема
Я устанавливаю реакцию ref
с помощью встроенного определения функции
render = () => {
return (
<div className="drawer" ref={drawer => this.drawerRef = drawer}>
то в componentDidMount
ссылка DOM не установлена
componentDidMount = () => {
// this.drawerRef is not defined
Мое понимание - обратный вызов ref
должен выполняться во время монтирования, однако добавление операторов console.log
показывает, что componentDidMount
называется до функцией обратного вызова ref.
Другие примеры кода, на которые я смотрел, например, это обсуждение на github указывают одно и то же предположение, componentDidMount
следует называть после любых ref
обратных вызовов, определенных в render
, он даже указанных в разговоре
Так что компонентныйDidMount запускается после того, как все обратные вызовы ref был выполнен?
Да.
Я использую реакцию 15.4.1
Что-то еще я пробовал
Чтобы проверить, что функция ref
вызывается, я попытался определить ее в классе как таковой
setDrawerRef = (drawer) => {
this.drawerRef = drawer;
}
то в render
<div className="drawer" ref={this.setDrawerRef}>
Запись в консоли в этом случае показывает, что обратный вызов действительно называется после componentDidMount