SOLVED: useEffect runs twice, when component did mount (then data.length is 0 because of scope), and when data is loaded
I have this component that receives data and then runs a setInterval, but the data.length is still 0. It seems that it is not updated. How do I fix this?
import "./App.css";
import { useEffect, useState } from "react";
import Slide from "./components/Slide";
function QuoteSlider({ data }) {
const [currentItem, setCurrentItem] = useState({ value: "Loading" });
useEffect(() => {
setInterval(() => {
randomItem();
}, 4000);
}, [data]);
function randomItem() {
console.log("data.length is " + data.length);
const randomNumber = Math.floor(Math.random() * data.length);
const newItem = data[randomNumber];
setCurrentItem(newItem);
}
return <div>{currentItem?.value}</div>;
}
export default QuoteSlider;
And in the parent:
<QuoteSlider data={[{someData: 'here'},{someData: 'one more']}/>