π ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΎΠ»Ρ Ρ React Hook Form ΠΈ Controller
ΠΡΠ»ΠΈ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠΎΡΠΌΡ Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ, ΡΠΎ React Hook Form Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ
useFieldArray
ΠΈ
Controller
ΡΡΠ°Π½Π΅Ρ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΡΠΎΡ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Ρ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΠΈΠ»ΠΈ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ UI
πΉΠ§ΡΠΎ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ?
- Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΎΡΠΌΡ Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ
useFieldArray
Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ Π΄Π°Π½Π½ΡΡ
.
- ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠ΅ΡΠ΅Π·
Controller
.
πΉΠ Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
import React from 'react';
import { useForm, useFieldArray, Controller } from 'react-hook-form';
function DynamicForm() {
const { control, handleSubmit } = useForm({
defaultValues: {
users: [{ name: '', age: '' }],
},
});
const { fields, append, remove } = useFieldArray({
control,
name: 'users',
});
const onSubmit = (data) => {
console.log(data);
};
return (
<form onSubmit={handleSubmit(onSubmit)}>
{fields.map((field, index) => (
<div key={field.id} style={{ marginBottom: '10px' }}>
<Controller
name={`users.${index}.name`}
control={control}
render={({ field }) => (
<input {...field} placeholder="ΠΠΌΡ" />
)}
/>
<Controller
name={`users.${index}.age`}
control={control}
render={({ field }) => (
<input {...field} placeholder="ΠΠΎΠ·ΡΠ°ΡΡ" type="number" />
)}
/>
<button type="button" onClick={() => remove(index)}>
Π£Π΄Π°Π»ΠΈΡΡ
</button>
</div>
))}
<button type="button" onClick={() => append({ name: '', age: '' })}>
ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ»Π΅
</button>
<button type="submit">ΠΡΠΏΡΠ°Π²ΠΈΡΡ</button>
</form>
);
}
export default DynamicForm;
πΉ ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ?
1.
useFieldArray
- ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ.
-
fields
β ΡΠ΅ΠΊΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°.
-
append
β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΠΌΠ°ΡΡΠΈΠ².
-
remove
β ΡΠ΄Π°Π»ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ.
2.
Controller
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ
value
,
onChange
ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Ρ Π²Π°ΡΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ.
3.
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΎΠ»Ρ
- Π‘ ΠΊΠ°ΠΆΠ΄ΡΠΌ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ
append
Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΏΠΎΠ»ΡΠΌΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ Π²Π°ΡΠ΅ΠΌΡ ΠΌΠ°ΡΡΠΈΠ²Ρ.
- ΠΡΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈ ΡΠΎΡΠΌΡ.
πΉ ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π°
-
ΠΡΠΎΡΡΠΎΡΠ° ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
.
-
ΠΠΈΠ±ΠΊΠΎΡΡΡ: ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π»ΡΠ±ΡΡ
ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
-
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ: React Hook Form ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π½Π΄Π΅ΡΠΎΠ².
π― ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
React Hook Form ΡΡΠΎ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΠΈ ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΠ»ΡΠΌΠΈ. ΠΡΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π³ΠΈΠ±ΠΊΠΎΡΡΡ Π²Π°ΡΠ΅ΠΌΡ ΠΊΠΎΠ΄Ρ. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π² ΡΠ²ΠΎΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
!
ReactJs Daily | #begginers