Middle
31
Wizard Flow-да көп қадамды формаларды жүзеге асырдыңыз ба? Әртүрлі қадамдардан деректерді жинау кезінде prop drilling-ден қалай сақтандыңыз және аралық күйді серверге жібермес бұрын қайда сақтадыңыз?
Сұралған компаниялар
Магнут
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
}
Такой подход упрощает управление состоянием и делает код чище.