【发布时间】:2021-01-26 10:28:52
【问题描述】:
我正在尝试修改下面的代码以使用 react useRef 而不是使用 document.querySelector(selector) as HTMLElement;,因为它不是反应的最佳实践。我正在尝试实现在 Formik 表单上滚动到第一个错误的功能,此代码确实有效,但我如何使用 React useRef 来做到这一点?
代码如下:
import React, { useEffect } from 'react';
import { useFormikContext } from 'formik';
const FocusError = () => {
const { errors, isSubmitting, isValidating } = useFormikContext();
useEffect(() => {
if (isSubmitting && !isValidating) {
let keys = Object.keys(errors);
if (keys.length > 0) {
const selector = `[name=${keys[0]}]`;
const errorElement = document.querySelector(selector) as HTMLElement;
if (errorElement) {
errorElement.focus();
}
}
}
}, [errors, isSubmitting, isValidating]);
return null;
};
export default FocusError;
//Put it within formiks Form.
<Formik ...>
<Form>
...
<FocusError />
</Form>
</Formik>
【问题讨论】: