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. Используя эти методы, вы можете эффективно получать доступ к исходным значениям формы и использовать их в различных частях вашего приложения.