I have an array stored as a prop:
constructor(props) {
super(props);
this.letters = [];
}
Inside a componentDidMount method, I put this prop in a forEach loop that has a setTimeout in it:
componentDidMount() {
this.letters.forEach((letter, index) => {
setTimeout(function() {
letter.classList.add('stroke');
}, index * 125);
});
}
This works as expected, adding a class to each element inside the prop array.
Then I tried adding a second forEach loop after this one. This looks a little confusing, but it's basically the same as the first forEach loop, but it's wrapped inside a setTimeout so that it starts 1 second later:
this.letters.forEach((letter, index) => {
setTimeout(function() {
letter.classList.add('stroke');
}, index * 125);
});
setTimeout(function() {
this.letters.forEach((letter, index) => {
setTimeout(function() {
letter.classList.add('fill');
}, index * 125);
});
}, 1000);
With these two forEach loops on this.letters back to back, I get this error on the this.letters.forEach... line of the second loop:
TypeError: Cannot read property 'forEach' of undefined
I tried setting this.letters as another variable inside componentDidMount, and used that variable instead of this.letters:
const letters = this.letters;
letters.forEach((letter, index) => {
setTimeout(function() {
letter.classList.add('stroke');
}, index * 125);
});
setTimeout(function() {
letters.forEach((letter, index) => {
setTimeout(function() {
letter.classList.add('fill');
}, index * 125);
});
}, 1000);
This works, but I'm not sure I understand why this.letters doesn't work?
I also tried replacing just one of the loops with the letters variable instead of this.letters -- the first loop works fine with this.letters, but the second loop doesn't work with this.letters no matter what.