Currently, I am trying to build a function that does the following thing:
First click: 1, 2, 3, 4, 5, 6, 7
Second click: 8
Third click: 9
import { FC, useState } from 'react';
export const HandOutCards: FC = () => {
const [count, setCounter] = useState(0);
function firstHandOut(counter: number) {
let maxLength = 7;
for (let i = 0; i < 10; i++) {
console.log(i);
if (i === (maxLength + counter)) {
break;
}
}
}
const counter = () => {
setCounter(count + 1);
firstHandOut(count);
};
return (
<button onClick={counter}>HandOut</button>
);
};But in the snippet the code does this now:
- First click 1, 2, 3, 4, 5, 6, 7
- Second click 1, 2, 3, 4, 5, 6, 7, 8
- Third click 1, 2, 3, 4, 5, 6, 7, 8, 9
How can I only add one index when I have a second or third click.
Advertisement
Answer
You have to save the last count i to prevent the loop to start from 0 everytime.
If you want to output the first 7 numbers inline you have to call console.log () after the for loop. But you can feed a string in the loop for the final output. (you can use a simple ternary operator to prepend the comma only if its not the first loop)
Working example: (simplified for demonstration)
let counter = 0;
let last_count = 0;
let maxLength = 7;
function firstHandOut() {
let output = '';
for (let i = last_count + 1; i < 10; i++) {
output += (i != last_count + 1 ? ', ' : '') + i;
if ((i === (maxLength + counter))) {
last_count = i;
break;
}
}
console.log(output);
counter++;
}<button type="button" onclick="firstHandOut();">test</button>