Я пытаюсь использовать динамические поля с формой реакции-крючка в реагирующем родном. Сначала я пытался все вручную зарегистрировать, но это не сработало. Затем я попытался использовать ловушку useFieldArray, но все вновь созданные поля не регистрируются правильно. Вот мой последний подход:
У меня есть настраиваемый компонент для имитации веб-интерфейса для реагирования на собственный TextInput и пересылки ссылки.
const Input = forwardRef((props, ref) => {
const {
onAdd,
...inputProps
} = props
return (
<View>
<TextInput
ref={ref}
{...inputProps} />
<Button onPress=(() => onAdd()} />
</View>
)
}
Затем я использую этот компонент в соответствии с тем, как документы useFieldArray отображаются в моей форме, за исключением того, что у меня есть собственный обработчик изменений. Я также явно устанавливаю ссылку и пытаюсь зарегистрировать отдельное новое поле.
const Inputs = useRef([])
const { control, register, setValue, handleSubmit, errors } = useForm({
defaultValues: {
test: defaultVals // this is an array of objects {title: '', id: ''}
}
})
{
fields.map((field, idx, arr) => (
<Input
key={field.id}
name={`test[${idx}]`}
defaultValue={field.name}
onChangeText={text => handleInput(text, idx)}
onAdd={() => append({title: '', id: ''})
ref={
e => register({ name: `test[${idx}]`
Inputs.curent[idx] = e
})
}
Когда я нажимаю кнопку ввода, он отображает новый ввод, как и ожидалось. Но когда я отправляю данные, я получаю только значения defaultVals, а не данные из нового ввода, хотя у меня есть объект, представляющий этот ввод в массиве test
. Кажется, что-то не так с регистрацией входов, но я не могу понять это.
Как мне правильно настроить useFieldArray или использовать другие способы, чтобы динамические поля реагировали нативно с помощью response-hook-form?