Back to questions
Middle
2
Вы реализовывали многошаговые формы в Wizard Flow. Как избегали prop drilling при сборе данных с разных шагов и где хранился промежуточный state до отправки на сервер?
Companies where asked
Магнут
Answer from AI
sobes.tech AI
Чтобы избежать prop drilling при реализации многошаговых форм (Wizard Flow), обычно используют централизованное хранилище состояния, доступное всем шагам.
Основные подходы:
-
Контекст React (React Context)
- Создаётся контекст, который хранит общий state формы и функции для обновления.
- Все шаги получают доступ к данным через
useContext, без необходимости передавать props через каждый уровень.
-
Менеджеры состояния (Redux, MobX и др.)
- Хранение промежуточных данных в глобальном состоянии.
- Позволяет легко управлять данными и обновлять их из любого шага.
-
Локальный state в родительском компоненте Wizard
- Родительский компонент Wizard содержит весь state формы.
- Шаги получают данные и колбэки через props, но так как структура обычно плоская, prop drilling минимален.
Промежуточный state обычно хранится в памяти на клиенте до момента отправки на сервер, чтобы пользователь мог переходить между шагами, изменять данные и только в конце отправлять их одним запросом.
Пример с React Context:
const FormContext = React.createContext();
function Wizard() {
const [formData, setFormData] = React.useState({});
const updateData = (stepData) => {
setFormData(prev => ({ ...prev, ...stepData }));
};
return (
<FormContext.Provider value={{ formData, updateData }}>
{/* Шаги формы */}
</FormContext.Provider>
);
}
function Step1() {
const { formData, updateData } = React.useContext(FormContext);
// Работа с formData и updateData
}
Такой подход упрощает управление состоянием и делает код чище.