Sobes.tech
Middle
31

Wizard Flow-да көп қадамды формаларды жүзеге асырдыңыз ба? Әртүрлі қадамдардан деректерді жинау кезінде prop drilling-ден қалай сақтандыңыз және аралық күйді серверге жібермес бұрын қайда сақтадыңыз?

Сұралған компаниялар
Магнут

AI-дан жауап

sobes.tech AI

Чтобы избежать prop drilling при реализации многошаговых форм (Wizard Flow), обычно используют централизованное хранилище состояния, доступное всем шагам.

Основные подходы:

  1. Контекст React (React Context)

    • Создаётся контекст, который хранит общий state формы и функции для обновления.
    • Все шаги получают доступ к данным через useContext, без необходимости передавать props через каждый уровень.
  2. Менеджеры состояния (Redux, MobX и др.)

    • Хранение промежуточных данных в глобальном состоянии.
    • Позволяет легко управлять данными и обновлять их из любого шага.
  3. Локальный 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
}

Такой подход упрощает управление состоянием и делает код чище.