ReactNative에서 react-hook-form을 사용하려면?
➫ Controller 사용해야함.
- handleSubmit(onSubmit) : data에는 각 value가 들어간다. {ID: '', Password: '', Confirm: ''}
- rules :
- required : boolean
- maxLength, max : number
- minLength, min : number
- pattern : 정규표현식
- validate : function
- valueAsNumber, valueAsDate : boolean
- setValueAs : <T>(value: any) => T
- disable : boolean = false
- onChange : (e: SyntheticEvent) => void
- onBlur : (e: SyntheticEvent) => void
import { Text, View, TextInput, Button, Alert } from "react-native";
import { useForm, Controller } from "react-hook-form";
export default function App() {
const { control, handleSubmit, formState: { errors }, watch } = useForm({
defaultValues: {
ID: '',
Password: '',
Confirm: ''
}
});
const password = useRef({});
password.current = watch("Password", "");
const onSubmit = data => console.log(data); // {ID: '', Password: '', Confirm: ''}
return (
<View>
<Controller
control={control}
rules={{
minLength: {
value: 8,
message: "아이디 8글자 이상 입력하시오"
},
maxLength: {
value: 15,
message: "아이디를 15글자 이하 입력하시오"
},
required: {
value: true,
message: "아이디를 입력하시오"
}
}}
render={({ field: { onChange, onBlur, value } }) => (
<TextInput
placeholder="ID"
onBlur={onBlur}
onChangeText={onChange}
value={value}
/>
)}
name="ID"
/>
{errors.ID && <Text style={{color: 'red'}}>{errors.ID.message}</Text>} // rules에 적은 message가 조건에 맞게 나온다
<Controller
control={control}
rules={{
minLength: {
value: 8,
message: "비밀번호를 8글자 이상 입력하시오"
},
maxLength: {
value: 20,
message: "비밀번호를 20글자 이하 입력하시오"
},
required: {
value: true,
message: "비밀번호를 입력하시오"
}
}}
render={({ field: { onChange, onBlur, value } }) => (
<TextInput
placeholder="Password"
onBlur={onBlur}
onChangeText={onChange}
value={value}
/>
)}
name="Password"
/>
{errors.Password && <Text style={{color: 'red'}}>{errors.Password.message}</Text>}
<Controller
control={control}
rules={{
validate: (value) => value === password.current || "비밀번호가 일치하지 않습니다", // 조건이 맞는지 확인한다. 위에서 선언한 password 변수, watch를 이용하여 Password의 value가 저장된다
required: {
value: true,
message: "비밀번호를 입력하시오"
}
}}
render={({ field: { onChange, onBlur, value } }) => (
<FormInput
secureTextEntry={true}
placeholder="비밀번호 확인"
onBlur={onBlur}
onChangeText={onChange}
value={value}
/>
)}
name="Confirm"
/>
{errors.Confirm && <Text style={{color: 'red'}}>{errors.Confirm.message}</Text>}
<Button title="Submit" onPress={handleSubmit(onSubmit)} />
</View>
);
}
'개발 > React(ReactNative)' 카테고리의 다른 글
[reactnative] goback 후에 useeffect가 작동하지 않음 (1) | 2023.10.04 |
---|---|
ReactNative 네비게이션 (0) | 2023.09.14 |
[react express postgresql] 로그인 (0) | 2023.09.01 |
[React] react 회원가입 폼 만들기 (0) | 2023.07.26 |