Извлечение и использование значений начального состояния Formik вне формы: подробное руководство

Formik — популярная библиотека форм для React, которая упрощает управление и проверку форм. Хотя Formik предоставляет простой способ обработки состояния формы внутри компонента, могут возникнуть сценарии, в которых вам потребуется доступ и использование исходных значений формы вне компонента формы. В этой статье мы рассмотрим различные методы извлечения значений начального состояния из Formik и использования их в других местах вашего приложения.

Метод 1: использование хука useFormikContext
Хук useFormikContext позволяет получить доступ к контексту Formik из любого компонента в иерархии форм Formik. Используя этот крючок, вы можете получить начальные значения состояния и использовать их вне компонента формы. Вот пример:

import { useFormikContext } from 'formik';
const MyComponent = () => {
  const { initialValues } = useFormikContext();
  // Access and use the initialValues object as needed
  // ...
  return <div>...</div>;
};

Метод 2: передача начальных значений в качестве реквизитов
Другой подход заключается в передаче начальных значений в качестве реквизитов компонентам, которым они требуются. Вы можете определить начальные значения вне компонента Formik и передать их в качестве реквизита как компоненту Formik, так и любым другим компонентам, которым требуется доступ к значениям. Вот пример:

import { Formik, Form } from 'formik';
const MyForm = ({ initialValues }) => {
  return (
    <Formik initialValues={initialValues} onSubmit={...}>
      <Form>
        {/* Form fields */}
      </Form>
    </Formik>
  );
};
const MyComponent = ({ initialValues }) => {
  // Access and use the initialValues prop as needed
  // ...
  return <div>...</div>;
};
// Usage
const initialFormValues = { ... };
ReactDOM.render(
  <>
    <MyForm initialValues={initialFormValues} />
    <MyComponent initialValues={initialFormValues} />
  </>,
  document.getElementById('root')
);

Метод 3: сохранение значений в решении для управления общим состоянием.
Если вы используете решение для управления состоянием, такое как Redux, MobX или React Context, вы можете сохранить исходные значения формы в общем состоянии. Таким образом, вы можете получить к ним доступ и использовать их в своем приложении. Вот пример использования Redux:

// Redux actions and reducer
const SET_INITIAL_VALUES = 'SET_INITIAL_VALUES';
const setInitialValues = (values) => ({
  type: SET_INITIAL_VALUES,
  payload: values,
});
const initialValuesReducer = (state = {}, action) => {
  switch (action.type) {
    case SET_INITIAL_VALUES:
      return action.payload;
    default:
      return state;
  }
};
// Formik component
import { useDispatch, useSelector } from 'react-redux';
import { setInitialValues } from './actions';
const MyForm = () => {
  const initialValues = useSelector((state) => state.initialValues);
  const dispatch = useDispatch();
  // Set initial values in shared state
  useEffect(() => {
    dispatch(setInitialValues(initialFormValues));
  }, [dispatch]);
  // ...
  return (
    <Formik initialValues={initialValues} onSubmit={...}>
      <Form>
        {/* Form fields */}
      </Form>
    </Formik>
  );
};
// Other components
const MyComponent = () => {
  const initialValues = useSelector((state) => state.initialValues);
  // Access and use the initialValues from shared state as needed
  // ...
  return <div>...</div>;
};

В этой статье мы рассмотрели различные методы извлечения и использования значений начального состояния Formik вне компонента формы. Мы рассмотрели использование перехватчика useFormikContext, передачу начальных значений в качестве реквизитов и сохранение значений в решении для управления общим состоянием, таком как Redux. Используя эти методы, вы можете эффективно получать доступ к исходным значениям формы и использовать их в различных частях вашего приложения.