Middle
Avez-vous implémenté des formulaires à plusieurs étapes dans Wizard Flow ? Comment avez-vous évité le prop drilling lors de la collecte des données de différentes étapes et où était stocké l'état intermédiaire avant de l'envoyer au serveur ?
sobes.tech IA
Réponse de l'IA
Чтобы избежать 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
}
Такой подход упрощает управление состоянием и делает код чище.