我将包含 FORMIK 的功能组件更改为 class 组件并出现错误。为什么?
I changed the functional component containing the FORMIK to the class component and got errors. Why?
我有包含 formik 的功能组件:
const SignupForm = () => {
const {handleSubmit, values, handleChange, errors, handleBlur, isSubmitting, setSubmitting} = useFormik({
initialValues: {
/....
},
validateOnBlur: false,
validateOnchange: false,
validationSchema: yup.object().shape({
/.....
}),
onSubmit: async (formValues) => {
console.log('submit', formValues);
setSubmitting(true);
try {
/.....
} catch(e) {
console.error(e);
}
},
});
return (
<form className="fform" onSubmit={handleSubmit}>
/....
<button type="submit" disabled={isSubmitting}>Submit Form</button>
</form>
);
};
但我需要将此组件更改为 class,我做到了:
class SignupForm extends React.Component {
const {handleSubmit, values, handleChange, errors, handleBlur, isSubmitting, setSubmitting} = useFormik({
initialValues: {
/....
},
validateOnBlur: false,
validateOnchange: false,
validationSchema: yup.object().shape({
/....
}),
onSubmit: async (formValues) => {
console.log('submit', formValues);
setSubmitting(true);
try {
/.....
} catch(e) {
console.error(e);
}
},
});
render() {
return (
<form className="fform" onSubmit={handleSubmit}>
/.....
<button type="submit" disabled={isSubmitting}>Submit Form</button>
</form>
);
}
};
我遇到了错误:
./src/components/Signup/SignupForms.js
Line 11:11: Parsing error: Unexpected token
9 | class SignupForm extends React.Component {
10 |
> 11 | const {handleSubmit, values, handleChange, errors, handleBlur, isSubmitting, setSubmitting} = useFormik({
| ^
12 | initialValues: {
13 | username: '',
14 | password: '',
截图错误
如何解决这个错误?请帮我写一个class组件,这样就没有错误了。
您不能在 Class 组件中使用挂钩。
有一个库 (https://github.com/salvoravida/react-universal-hooks) 可以让您使用,但将两者混合使用并不是最佳做法。 React 团队做出这个限制是为了让事情保持理智。
您必须使用 withFormik higher-order component or their <Formik />
组件,该组件使用渲染道具。
这是我放在一起的一个示例,它使用了他们的 render props 组件,因为它非常容易转换。
class SignupForm extends React.Component {
render() {
const formikProps = {
initialValues: {
//....
},
validateOnBlur: false,
validateOnchange: false,
validationSchema: yup.object().shape({
//....
}),
onSubmit: async (formValues, { setSubmitting }) => {
console.log('submit', formValues);
setSubmitting(true);
try {
///.....
} catch (e) {
console.error(e);
}
},
};
return (
<Formik {...formikProps} >
{props =>
(<form className="fform" onSubmit={props.handleSubmit}>
{/*/.....*/}
<button type="submit" disabled={props.isSubmitting}>Submit Form</button>
</form>)}
</Formik>
);
}
};
这是更改为使用 class 而不是挂钩 https://codesandbox.io/s/cool-dew-ey8o9 的组件。除了数据调用之外的所有内容都可以自行运行(405 错误)。数据调用确实从表单中获取所有项目,这是重要的部分。
我有包含 formik 的功能组件:
const SignupForm = () => {
const {handleSubmit, values, handleChange, errors, handleBlur, isSubmitting, setSubmitting} = useFormik({
initialValues: {
/....
},
validateOnBlur: false,
validateOnchange: false,
validationSchema: yup.object().shape({
/.....
}),
onSubmit: async (formValues) => {
console.log('submit', formValues);
setSubmitting(true);
try {
/.....
} catch(e) {
console.error(e);
}
},
});
return (
<form className="fform" onSubmit={handleSubmit}>
/....
<button type="submit" disabled={isSubmitting}>Submit Form</button>
</form>
);
};
但我需要将此组件更改为 class,我做到了:
class SignupForm extends React.Component {
const {handleSubmit, values, handleChange, errors, handleBlur, isSubmitting, setSubmitting} = useFormik({
initialValues: {
/....
},
validateOnBlur: false,
validateOnchange: false,
validationSchema: yup.object().shape({
/....
}),
onSubmit: async (formValues) => {
console.log('submit', formValues);
setSubmitting(true);
try {
/.....
} catch(e) {
console.error(e);
}
},
});
render() {
return (
<form className="fform" onSubmit={handleSubmit}>
/.....
<button type="submit" disabled={isSubmitting}>Submit Form</button>
</form>
);
}
};
我遇到了错误:
./src/components/Signup/SignupForms.js
Line 11:11: Parsing error: Unexpected token
9 | class SignupForm extends React.Component {
10 |
> 11 | const {handleSubmit, values, handleChange, errors, handleBlur, isSubmitting, setSubmitting} = useFormik({
| ^
12 | initialValues: {
13 | username: '',
14 | password: '',
截图错误
如何解决这个错误?请帮我写一个class组件,这样就没有错误了。
您不能在 Class 组件中使用挂钩。
有一个库 (https://github.com/salvoravida/react-universal-hooks) 可以让您使用,但将两者混合使用并不是最佳做法。 React 团队做出这个限制是为了让事情保持理智。
您必须使用 withFormik higher-order component or their <Formik />
组件,该组件使用渲染道具。
这是我放在一起的一个示例,它使用了他们的 render props 组件,因为它非常容易转换。
class SignupForm extends React.Component {
render() {
const formikProps = {
initialValues: {
//....
},
validateOnBlur: false,
validateOnchange: false,
validationSchema: yup.object().shape({
//....
}),
onSubmit: async (formValues, { setSubmitting }) => {
console.log('submit', formValues);
setSubmitting(true);
try {
///.....
} catch (e) {
console.error(e);
}
},
};
return (
<Formik {...formikProps} >
{props =>
(<form className="fform" onSubmit={props.handleSubmit}>
{/*/.....*/}
<button type="submit" disabled={props.isSubmitting}>Submit Form</button>
</form>)}
</Formik>
);
}
};
这是更改为使用 class 而不是挂钩 https://codesandbox.io/s/cool-dew-ey8o9 的组件。除了数据调用之外的所有内容都可以自行运行(405 错误)。数据调用确实从表单中获取所有项目,这是重要的部分。