我正在为项目使用Formik,设置如下:
|-MenuModal
|--MenuEdit
|---MenuEditForm
MenuModal
是MenuEdit
和MenuEditForm
的父项。组件MenuEditForm
负责返回Formik表单,但我在其父项MenuModal
中调用提交,后者稍后通过React的引用在MenuEdit
中运行Submit函数。乱?是的!
现在,我正在尝试使用状态和回调函数将Formiks values
从MenuEditForm
移到MenuEdit
。但是由于我没有使用Formiks自己的onSubmit
:
<Formik
initialValues={menu}
validationSchema={validationSchema}
onSubmit={values => console.log('values', values)} // 'values' is undefined
...
我的values
将是未定义的,并且我无法使自己的Submit函数通过。
所以我想知道如何访问values
中的MenuEditForm
,以便以后将其传递给MenuEdit
并完成我的提交功能。
感谢阅读。
答案 0 :(得分:9)
要访问formik组件之外的值,可以使用钩子执行此操作:
class Parent(models.Model):
child_name = models.TextField(default='%(class)s')
class ChildA(Parent):
. . .
class ChildB(Parent):
. . .
然后,可以在组件外部的任何地方使用formRef.current.values访问值。
答案 1 :(得分:0)
您只需传递一个函数即可从子组件接收值。
例如:
MenuModal:
const MenuModal = () => {
const [values, setvalues] = useState();
return (
...
<MenuEdit values={values} onFormSubmit={(values) => setvalues(values)} />
...
);
}
MenuEdit:
const MenuEdit = ({values, onFormSubmit}) => {
// do something with values
return (
...
<MenuEditForm onFormSubmit={onFormSubmit} />
...
)
...
}
MenuEditForm:
const MenuEditForm = ({onFormSubmit}) => (
...
<Formik
initialValues={menu}
validationSchema={validationSchema}
onSubmit={values => onFormSubmit(values)}
...
)
答案 2 :(得分:0)
由于 formik 将值传递给 onChangeText 我们可以将其保存在 useState 中以进行动态更新
onChangeText={(value: string) => {
handleChange('name')(value);
setName(value);
}}