I have an array in state:
const [show, setShow] = useState([false, false, false, false])
These affect whether or not an image is displayed.
I'd like to iterate through them one by one, using a delay of 500ms between each iteration, and switch each to true so that the images are slowly revealed. To be clear, they should all end up as true, rather than just being temporarily switched to true.
I've used lots of methods so far, but can only get them to change the current index to true during that loop iteration.
Any help would be appreciated!
UPDATE: here's where I'm currently up to. It's not working well!
export const Leaves = ({ svgHeight }) => {
const [show, setShow] = useState(0);
let inc = show;
setInterval(() => {
setShow(inc);
inc++;
}, 1000);
console.log(show);
return (
<svg
className={`leaves ${svgHeight}`}
style={{ height: svgHeight }}
clip-rule="evenodd"
fill-rule="evenodd"
stroke-linejoin="round"
stroke-miterlimit="2"
version="1.1"
viewBox="0 0 2e3 3e3"
xmlSpace="preserve"
xmlns="http://www.w3.org/2000/svg"
>
<g fill-rule="nonzero">
<rect width="2e3" height="" fill="rgba(255,255,255,0)" />
{show >= 0 && (
<path
d="m1403.3 1640.2c0.15-6.25-10-2.02-10.12 2.96-6.34 252.73-159.68 479.21-212.39 724.37-4.63 21.55-8.4 43.21-11.19 64.95 0.01-12.74-0.11-25.47-0.52-38.21-2.63-82.46-14.27-164.49-34.1-245.25-19.63-79.96-45.93-158.57-70.15-237.59-14.33-46.76-27.92-93.78-38.87-141.22-10.09-46.61-15.93-79.22-19.45-108.26-9.685-79.88-7.238-160.44 1.9-240.27 17.87-156.05 60.33-309 89.75-463.57 31.83-167.18 47.55-338.89-3.43-504.59-1.73-5.651-11.01 0.396-9.55 5.151 93.74 304.73-36.96 614.26-80.68 916.56-10.753 74.37-16.742 149.42-13.447 224.36 2.014 45.81 8.113 91.25 16.947 136.35-9.784-8.67-20.36-16.82-31.166-24.54-46.083-32.94-93.535-62.48-133.06-101.53-79.124-78.17-130.84-175.86-148.35-277.67-9.992-58.09-8.543-117.1 4.538-174.75 1.468-6.47-8.832-4.68-10.024 0.57-44.768 197.31 48.905 406.26 234.46 530.73 29.025 19.47 62.557 39.93 87.232 64.93 5.68 26.79 12.25 53.47 19.47 80.02 44.02 161.74 106.27 319.25 122.77 485.57 18.48 186.16-8.54 374.76-78.52 551.89-2.47 6.24 7.05 7.47 9.26 1.88 42.47-107.51 69.29-219.14 79.87-331.99 7.18-84.43 19.51-165.14 49.02-258.38 35.69-112.75 93.36-244.89 156.52-437.84 21.8-66.57 31.55-135.49 33.29-204.63z"
fill="#778680"
/>
)}
{show >= 1 && (
<path
d="m722.11 1713.1s64.149 145.58 341.52 217.54c0 0-41.09-77.82-154.61-154.63-50.879-34.43-186.91-62.91-186.91-62.91z"
fill="#778680"
/>
)}
{show >= 2 && (
<path
d="m1528.1 1897.3s-178.19 45.87-283.64 283.62c0 0 136.08-77.2 235.73-171.17 44.66-42.11 47.91-112.45 47.91-112.45z"
fill="#778680"
/>
)}
{show >= 3 && (
<path
d="m893.99 1155.4s-144.93 99.01-137.52 352.89c0 0 92.023-114.73 142.85-233.44 22.78-53.2-5.328-119.45-5.328-119.45z"
fill="#778680"
/>
)}
{show >= 4 && (
<path
d="m993.38 1625.2s104.42-133.73 128.54-217.4 26.61-187.11 26.61-187.11-82.26 90.13-112.03 186.81-43.122 217.7-43.122 217.7z"
fill="#707f79"
/>
)}
{show >= 5 && (
<path
d="m993.35 1624.8s220.77-112.98 217.52-269.43c0 0-191.55 144.86-217.52 269.43z"
fill="#778680"
/>
)}
{show >= 6 && (
<path
d="m1111.1 864.03s247.11-161.1 214.13-340.84c0 0-205.72 193.71-214.13 340.84z"
fill="#778680"
/>
)}
{show >= 7 && (
<path
d="m1384.7 1774.1s141.56-162.2 72.78-288.36c0 0-103.08 178.8-72.78 288.36z"
fill="#778680"
/>
)}
{show >= 8 && (
<path
d="m686.39 1191.8s139.32-163.58 68.809-289.05c0 0-100.6 179.8-68.809 289.05z"
fill="#778680"
/>
)}
{show >= 9 && (
<path
d="m1112.9 549.99s50.57-245.4-107.74-352.63c0 0 2.79 245.74 107.74 352.63z"
fill="#778680"
/>
)}
{show >= 10 && (
<path
d="m1322.8 1978.1s-177.71-216.97-81.85-379.77c0 0 126.58 237.41 81.85 379.77z"
fill="#778680"
/>
)}
{show >= 11 && (
<path
d="m711.15 1421.6s-246.84-130.51-239.05-305.33c0 0 212.94 165.58 239.05 305.33z"
fill="#778680"
/>
)}
{show >= 12 && (
<path
d="m1085 1006.8s2.36-91.018-58.05-186.86c-60.4-95.848-182.08-258.17-182.08-258.17s6.079 140.83 29.088 200.85c44.983 117.34 203.48 197.77 211.04 244.19z"
fill="#778680"
/>
)}
</g>
</svg>
);
};



setTimeout(() => setShow(old => old + 1), 1000);instead of the setInterval. Whenever it calls setShow it will re-render, and whenever it re-renders it will create a new timeout, so it increments without directly using a loop.