import React, { Component } from 'react';
import ReactDOM from 'react-dom';
export default class Game extends Component {
constructor(props) {
super(props);
this.myRef = React.createRef();
this.check = this.check.bind(this);
}
drawBackground() {
console.info("worked");
}
check () {
this.myRef.current.innerHTML = "Testing";
{this.drawBackground()}
}
render() {
return (
<div>
<h1 ref = {this.myRef} id = "foo">bar</h1>
{this.check()}
</div>
);
}
}
Мне нужно получить доступ к text внутри тега h1 в функции check, но я получаю эту ошибку Reactjs: Uncaught TypeError: Cannot set property 'innerHTML' of null. Я следил за документацией. Я что-то упускаю?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно присвоить значение реф. Вы передаете ref как функцию.
class App extends React.Component {
constructor(props) {
super(props);
this.check = this.check.bind(this);
}
state = {
dom: null
};
drawBackground() {
console.info("worked");
}
componentDidMount() {
this.check();
}
check() {
const innerHTML = ReactDOM.findDOMNode(this.myRef).innerHTML;
setTimeout(
() => (ReactDOM.findDOMNode(this.myRef).innerHTML = "TEST"),
1000
);
console.info(innerHTML);
this.setState({
dom: innerHTML
});
{
this.drawBackground();
}
}
render() {
return (
<div>
<h1 ref = {ref => (this.myRef = ref)} id = "foo">
bar
</h1>{" "}
//You need to assign the value of the ref to the instance variable
</div>
);
}
}
почему вы выполняете this.check() внутри рендера?
рад помочь :)
Ссылка сначала устанавливается после первого render ()
проверить демо один раз демонстрация
Вы ссылаетесь на ссылку сразу после ее объявления, поскольку объект ссылки получает смонтированный экземпляр компонента в качестве своего текущего.
Если вы одновременно пытаетесь получить доступ к модели DOM, она пытается ее сгенерировать. this.myRef ничего не вернет, потому что компонент не имеет реального представления DOM при рендеринге.
Позвольте мне создать примерcodeandbox, чтобы объяснить это