Чтобы каждый из ваших компонентов Stepper работал отдельно, вы можете поддерживать отдельное значение activeStep
для каждого из компонентов Stepper.
Например:
export default function App() {
const [steppers, setSteppers] = useState([{ activeStep: 0 }]);
const addForm = () => {
setSteppers(steppers.concat({ activeStep: 0 }));
};
const updateActiveStep = (index, count) => {
setSteppers(prev =>
prev.map((stepper, i) => {
if (i === index) {
return { ...stepper, activeStep: stepper.activeStep + count };
}
return stepper;
})
);
};
const handleReset = index => {
setSteppers(prev =>
prev.map((stepper, i) => {
if (i === index) {
return { ...stepper, activeStep: 0 };
}
return stepper;
})
);
};
console.log("stepper", steppers);
const stepperForms = steppers.map((stepper, index) => (
<MyStepper
activeStep={stepper.activeStep}
handleReset={() => handleReset(index)}
setActiveStep={count => updateActiveStep(index, count)}
/>
));
return (
<>
<button onClick={addForm}>add form</button>
{stepperForms}
</>
);
}
Рабочая динамическая c здесь реализована многоступенчатая форма :
https://codesandbox.io/s/upbeat-bhabha-i5wr2?file= / src / Stepper. js
Также поочередно , вы можете поддерживать activeStep в компоненте Stepper, чтобы каждый экземпляр Stepper использовал свое собственное значение активного шага.