#javascript #reactjs #react-hook-form
#javascript #reactjs #react-hook-form
Вопрос:
Я пробую простую форму, которая имеет функциональность CRUD. Когда я нажимаю кнопку РЕДАКТИРОВАНИЯ, она показывает все объекты, и все в порядке.
Функция editHandler получает все данные от этой кнопки:
<button
onClick={() => editHandler(discount)}
className='btn btn-info btn-sm'
data-bs-placement='top'
title='Edit Info'
>
<i className='fa fa-edit'></i>
</button>
Когда я утешаю эту функцию, передавая vlaues:
const editHandler = (e) => {
console.log(e);
}
Это и есть цель утешила Эдит Хендлер:
{
children: (3) ["Mahila", "Amira", "Badru-diin"]
date: "2020-11-22T10:49:32.296Z"
department: {_id: "5f8158396931c1c9cd164b54", name: "Inpatient"}
empId: "YH-A0184"
empName: "Abdulkadir Ahmed Mohamed"
fatherName: "Ahmed Mohamed Muuse"
hasChildren: true
husband: ""
isMale: true
isSingle: false
motherName: "Madina Ahmed Muse"
wives: [" Nuurto Abdi Ali"]
}
Но когда я использую setValue, он показывает только половину моих объектов, если я нажимаю кнопку, я снова показываю снова 70% и, наконец, если я нажимаю на нее, показываю все:
Результат выглядит следующим образом:
const editHandler = (e) => {
setValue('empId', e.empId)
setValue('empName', e.empName)
setValue('department', e.department._id)
setValue('fatherName', e.fatherName)
setValue('motherName', e.motherName)
setValue('isSingle', e.isSingle)
setValue('isMale', e.isMale)
setValue('wives', e.wives)
setValue('husband', e.husband)
setValue('hasChildren', e.hasChildren)
setValue('children', e.children)
setEdit(true)
console.log(watch())
}
Утешенный результат от watch():
{
department: "5f8158396931c1c9cd164b54"
empId: "YH-A0184"
empName: "Abdulkadir Ahmed Mohamed"
fatherName: "Ahmed Mohamed Muuse"
isMale: true
isSingle: false
motherName: "Madina Ahmed Muse"
}
и есть зависимые значения, такие как isSingle, которые показывают мужу или жене, является ли это ложным.
Что я делаю не так. Я новичок в react-hook-form.
Справка.
Я нашел кое-что, что вызывает проблему, так это то, что зависимые флажки типа show husband if !isSingle и !исМале.
но моя проблема все еще остается в силе, мне нужна эта зависимость от рабочего кода.
Комментарии:
1. Я не совсем понимаю ваш код. Какова ваша функция watch()? Где вы объявили свои «скидки» и «setValue»?
2. Вы знаете, что я импортировал setValue, смотрите с помощью useForm:
const { register, handleSubmit, errors, setValue, watch, reset } = useForm()
. и скидка поступает из базы данных, используя идентификатор, подобный информации 1 человека.3. Ну, из того, что вы говорите, похоже, что вы застряли в основах React. Когда вы
setValue
, это не сразу влияет наvalue
переменную, поскольку она асинхронна. Используйте auseEffect(() => { console.log(value) }, [value]);
обратный вызов внутри useEffect будет выполняться только при изменении значения массива зависимостей, так ЧТО НА САМОМ ДЕЛЕ вы знаете, что значение изменилось. Кроме того, это не сработает, потомуvalue
что это объект, поскольку объект не изменится, реакция не обнаружит изменений. Посмотрите наuseMemo
hook . reactjs.org/docs/hooks-reference.html#usememo4. Проблема не в useEffect . Даже если я
watch()
только консольный, он пропускает скрытые входные данные, которые ожидаютisSingle
быть ложными. При первом нажатии кнопкиisSingle
значение становится false, а при повторном нажатии кнопки скрытые входные данные получают свои значения.