[英]How do I use setInterval to dynamically change span.innerText
我正在尝试使用array动态重新渲染span.innerText,但是由于某种原因,浏览器无法读取我的state属性,返回“无法获取未定义的属性” text”。
您有任何想法如何使其工作吗?
class Reja_S2_Staff extends Component {
constructor(props) {
super(props);
this.state = {
text: ["Zabawy", "Radości", "Smutku"]
}
}
componentDidMount() {
this.changeSpan()
}
changeSpan =() => {
let span = document.querySelector('#staff_span');
for (let i = 0; i <= 3 ; i++) {
let interval = setInterval(function () {
span.innerText = `${this.state.text[i]}`
}, 2000);
}
};
render() {
return (
<div className='row' id='staff'>
<div className='col-12'>
<span id="staff_span" className="animate_span"> Zabawy </span>
</div>
你有没有尝试过:
let _this = this;
let interval = setInterval(function () {
span.innerText = `${_this.state.text[i]}`
}, 2000);
因为'setInterval'函数的作用域是...
this
在你传递给匿名函数setInterval
具有从该在不同的含义setInterval
调用水平。
恕我直言,你可以解决你的问题重写changeSpan
增加一个明确的结合外部this
如下:
changeSpan =() => {
let span = document.querySelector('#staff_span');
const self = this;
for (let i = 0; i <= 3 ; i++) {
let interval = setInterval(function () {
span.innerText = `${self.state.text[i]}`
}, 2000);
}
};
或使用lambda定义传递给setInterval
匿名函数(这应保证您期望的this
绑定):
changeSpan =() => {
let span = document.querySelector('#staff_span');
for (let i = 0; i <= 3 ; i++) {
let interval = setInterval( () => {
span.innerText = `${this.state.text[i]}`
}, 2000);
}
};
我目前无法测试这些解决方案,因此对于出现的错别字和错误我深表歉意...让我知道这是否可以帮助您!
我做了一个小提琴来解释这种情况: 带有超时和范围变量的小提琴 。
脚本还有其他一些问题:
for (let i = 0; i <= 3 ; i++) {
变成
let length = this.state.text.length - 1;
for (let i = 0; i <= length ; i++) {
另外,在这种情况下,最好使用具有自定义毫秒设置/变量的超时:
let timer = 2500 * i;
setTimeout( () => {
span.innerText = self.state.text[i];
}, timer);
希望小提琴在正确的道路上为您提供帮助...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.