React.createRef всегда null

Я, вероятно, делаю здесь что-то действительно глупое, но, хоть убей, я не могу понять, почему ref всегда равен нулю.

import React, { PureComponent } from 'react';

class MyComponent extends PureComponent {
  constructor(props) {
    super(props);
    this.myRef = React.createRef();
    console.info(this.myRef);
  }

  componentDidMount() {
    console.info(this.myRef);
  }

  componentWillUnmount() {
    console.info('unmounting');
  }

  render() {
    console.info(this.myRef);
    return (
      <div ref = {this.myRef}>
        foobar
      </div>
    );
  }
}

Приставка:

{current: null}
{current: null}
{current: null}

Я использую React 16.3. Что мне не хватает?

Работает для меня. Кажется, с вашим кодом все в порядке.

devserkan 17.08.2018 03:26

Работает. codeandbox.io/s/40z5o73wz0

NoobTW 17.08.2018 03:26

У меня тоже работает. Перейдите по этой ссылке, чтобы узнать больше о refs reactjs.org/docs/refs-and-the-dom.html

Hemadri Dasari 17.08.2018 03:29

Должен быть какой-то побочный эффект от другого моего кода. Как вы отметили, он работает автономно. Но я использую этот код в одном из компонентов своего проекта, я вижу {current: null}. Так странно.

deruse 17.08.2018 03:31

Проблема с @deruse this? Вы можете указать нам больше кодов для проверки.

NoobTW 17.08.2018 03:35

Поделитесь своим кодом другого компонента из wr MyComponent, чтобы лучше понять

Hemadri Dasari 17.08.2018 03:35

CAn вы попробуйте сделать консольный журнал this.myRef в рендере перед возвратом вместо componentDidMount и проверьте. Это должно печатать текущий узел, когда он вызывается из другого компонента. Возможно, MyComponent размонтирован к моменту его вызова, и поэтому вы видите null

Hemadri Dasari 17.08.2018 03:41

Еще {current: null}. Другой код - это просто App.jsx, который вызывает этот компонент для определенного маршрута. Я упростил его, чтобы просто рендерить на клиенте (без рендеринга на стороне сервера), но это не помогло ...

deruse 17.08.2018 03:43

Не похоже, что компонент размонтируется.

deruse 17.08.2018 03:47

Боже мой, я был на react 16.3, но на react-dom 16.2. изменение React-dom до версии 16.3 устранило проблему.

deruse 17.08.2018 03:50

Большой. Изложите это как ответ, чтобы другие получили пользу

Hemadri Dasari 17.08.2018 04:47

Я добавлял ref = {this.myRef} в компонент, когда он показывал {current: null}, потому что данные этого компонента не загружались одновременно. Итак, я использовал setTimeout в componentDidMount, тогда он работал. Итак, в следующий раз я использовал myRef в точном компоненте, и он работал. мне нужно было найти эту высоту элемента компонента. Итак, я использовал const height = this.myRef.current.clientHeight; в componentDidMount.

Arpit 16.11.2018 18:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
8
12
7 400
3

Ответы 3

Боже мой, я был на react 16.3, но на react-dom 16.2. изменение React-dom до версии 16.3 устранило проблему.

Я использовал this.myRef.value, который вернул мне значение null. Теперь я использую this.myRef.Текущий, который работает!

Это также может быть связано с тем, что ваш элемент не монтируется на componentDidMount().

Вместо этого попробуйте распечатать значение внутри componentDidUpdate().

Другие вопросы по теме