将 useCallback 函数传递给 Formik innerRef 以监听状态变化?
pass a useCallback function to Formik innerRef to listen for state changes?
我想知道是否有人有将回调从 useCallback
传递到 Formik 的 innerRef
道具的经验。我没有经常使用这个钩子,所以我仍在努力更好地理解它。
目前,我有以下内容,它适用于从 <Formik>
组件外部触发 Formik 提交,但我正在努力根据 Formik 的 isValid
的更改更新 isSavingDisabled
] 状态,因为 React 引用在指定为依赖项时不会触发 useEffect
(如 React 文档中所述)。
const MyModal = () => {
const [isSavingDisabled, setSavingDisabled] = useState( false )
const formikRef = useRef()
const doSave = () => {
if ( formikRef.current ) {
formikRef.current.handleSubmit()
}
}
return (
<Modal>
<ModalHeader>My Modal Header</ModalHeader>
<ModalBody>
<Formik innerRef={formikRef} {...formikProps}>
{ /* Form body */ }
</Formik>
</ModalBody>
<ModalFooter>
<Button disabled={isSavingDisabled} onClick={doSave}>
Save
</Button>
</ModalFooter>
</Modal>
)
}
我需要:1) 保留对 handleSubmit
的引用,以便我可以从 <Formik>
组件外部调用它,而且 2) 监听 isValid
属性 Formik 的状态,这样我就可以在 isValid === false
.
时禁用保存按钮
我看到 useCallback
,可能与 useState
配对,可以用来代替 useRef
,但我 运行 进入渲染循环。谁能指出我正确的方向?提前致谢!
经过大量搜索和阅读,我发现了这个:https://github.com/formium/formik/discussions/2746,其中讨论了使用 useFormik
挂钩与 FormikProvider
上下文提供程序。这给了我我需要的东西,我希望这种用法得到适当的记录。 :)
我想知道是否有人有将回调从 useCallback
传递到 Formik 的 innerRef
道具的经验。我没有经常使用这个钩子,所以我仍在努力更好地理解它。
目前,我有以下内容,它适用于从 <Formik>
组件外部触发 Formik 提交,但我正在努力根据 Formik 的 isValid
的更改更新 isSavingDisabled
] 状态,因为 React 引用在指定为依赖项时不会触发 useEffect
(如 React 文档中所述)。
const MyModal = () => {
const [isSavingDisabled, setSavingDisabled] = useState( false )
const formikRef = useRef()
const doSave = () => {
if ( formikRef.current ) {
formikRef.current.handleSubmit()
}
}
return (
<Modal>
<ModalHeader>My Modal Header</ModalHeader>
<ModalBody>
<Formik innerRef={formikRef} {...formikProps}>
{ /* Form body */ }
</Formik>
</ModalBody>
<ModalFooter>
<Button disabled={isSavingDisabled} onClick={doSave}>
Save
</Button>
</ModalFooter>
</Modal>
)
}
我需要:1) 保留对 handleSubmit
的引用,以便我可以从 <Formik>
组件外部调用它,而且 2) 监听 isValid
属性 Formik 的状态,这样我就可以在 isValid === false
.
我看到 useCallback
,可能与 useState
配对,可以用来代替 useRef
,但我 运行 进入渲染循环。谁能指出我正确的方向?提前致谢!
经过大量搜索和阅读,我发现了这个:https://github.com/formium/formik/discussions/2746,其中讨论了使用 useFormik
挂钩与 FormikProvider
上下文提供程序。这给了我我需要的东西,我希望这种用法得到适当的记录。 :)