將Formik與打字稿(離子)配合使用 [英] Using formik with typescript (Ionic)
本文介紹了將Formik與打字稿(離子)配合使用的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我嘗試使用Formik庫來驗證表單,但在將Change函數傳遞給輸入組件時遇到問題。
以下是主要組件:
import React from 'react';
import { IonHeader, IonContent, IonToolbar, IonTitle, IonButton, IonPage, IonList } from '@ionic/react';
import { useFormik } from 'formik';
import BasicInput from '../components/form/BasicInput';
const Login: React.FC = () => {
const validate = (values: {
name: string;
}) => {
const errors = {};
if (!values.name) {
}
return errors;
}
const formik = useFormik({
initialValues: {
name: ''
},
validateOnChange: false,
validateOnBlur: false,
validate,
onSubmit: values => {
alert(JSON.stringify(values, null, 2));
},
})
const {
name
} = formik.values
return (
<IonPage>
<IonHeader>
<IonToolbar>
<IonTitle>Login</IonTitle>
</IonToolbar>
</IonHeader>
<IonContent>
<IonList>
<BasicInput
id="name"
placeholder={"Your name"}
onChange={formik.handleChange}
/>
</IonList>
<div>
<IonButton onClick={handleLogin}>
Done
</IonButton>
</div>
</IonContent>
</IonPage>
)
}
export default Login;
下面是我的輸入組件:
import React from 'react';
import { IonInput, IonItem } from '@ionic/react';
const BasicInput: React.FC<{
id: string,
placeholder: string,
onChange: () => any
}> = (props) => {
return (
<IonItem>
<IonInput
placeholder={props.placeholder}
onIonChange={props.onChange}
>
</IonInput>
</IonItem>
)
}
export default BasicInput;
錯誤信息獲取為"Type‘(eventOrPath:字符串|ChangeEvent)=>void|((ventOrTextValue:String|ChangeEvent)=>void)’不可分配給類型‘()=>any’。"在我的onChange道具上。
如何為TS正確聲明它?
推薦答案
該消息指出問題所在。
在BasicInput
中,您正在定義道具onChange: () => any
。但是很明顯,將要調用的函數將需要接收新的輸入值作為參數,并且不需要返回任何內容,因此您的屬性定義應該是這樣的:
{
// ...
onChange: (newValue: string) => void;
}
但是,如果您將鼠標懸停在<IonInput />
的onIonChange
道具上,您可以看到傳遞的函數沒有將字符串作為參數接收!
e
,您可以通過e.target.value
訪問輸入值。
完整代碼如下:
import React from 'react';
import { IonInput, IonItem } from '@ionic/react';
const BasicInput: React.FC<{
id: string,
placeholder: string,
onChange: (newValue: string) => void
}> = (props) => {
return (
<IonItem>
<IonInput
placeholder={props.placeholder}
onIonChange={(e) => props.onChange(e.target.value)}
>
</IonInput>
</IonItem>
)
}
export default BasicInput;
這篇關于將Formik與打字稿(離子)配合使用的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持IT屋!
查看全文