React перемонтирует компоненты внутри каждого повторного рендеринга, вероятно, по разным причинам. Я не мог заставить его работать как есть, но, подняв состояние с ваших компонентов, оно сработает.
В любом случае вам, возможно, придется поднять состояние, потому что данные находятся не там, где вы он нужен для того, чтобы вы могли использовать вашу форму, когда пользователь закончил с ней.
Чтобы поднять состояние, я добавил текущее значение в массив шагов:
function addNext(step, index) {
componentKey++;
setSteps(prevState => {
let newState = [...prevState];
step = 1;
newState.splice(index + 1, 0, {
stepNumber: step,
component: getStepContent(step, componentKey),
value: getDefaultValue(step),
key: componentKey
});
return newState;
});
}
Я также убедился, что ваш getStepContent только что возвратил компонент, а не узел, чтобы вы могли отобразить его следующим образом:
<step.component
value={step.value}
onChange={handleChange}
data-index={i}
/>
Определенно, существует множество способов оптимизировать это, если вы начинаете сталкиваться с проблемами производительности. , конечно.
https://codesandbox.io/s/beautiful-river-2jltr?file= / src / App. js