1 回答
TA贡献1878条经验 获得超4个赞
您应该使用状态或引用。然后在componentDidMount上运行您的函数,而不是使用onload函数。因此,使用refs时,它将类似于以下内容:
class About extends Component {
constructor(props) {
super(props);
this.loading = this.loading.bind(this);
this.elRef = React.createRef();
}
componentDidMount() {
this.loading();
}
loading() {
const el = this.elRef.current;
let i = 0;
let txt = 'Hello';
let speed = 50;
function typeWriter() {
if (i < txt.length) {
el.innerHTML += txt.charAt(i);
i++;
setTimeout(typeWriter, speed);
}
}
typeWriter();
}
render() {
return (
<div className="about">
<h1 ref={this.elRef} />
<p>some text</p>
</div>
);
}
}
由于Dom操纵使用虚拟DOM,因此它在使用React时比较棘手。因此,在大多数情况下,当您尝试操纵该元素时,该元素尚未呈现为实际的DOM。因此,在处理DOM元素时,您需要使用react refs React Refs或将值设置为state。但是,在您的情况下,每次弹出一个字母都会触发重新渲染,因此,refs可能是适合您情况的最佳选择。
添加回答
举报