sanManjiro
@sanManjiro

Как перезаписывать объекты в useState?

Не получается установить строковое значение в объект useState.
Есть handlerSetPlaceOfIssue, который принимает value:
const handlerSetPlaceOfIssue = (value) => {
    console.log(value)
    setPassport({...passport, placeOfIssue: value})
    console.log(passport.placeOfIssue)
 }

Первый консоль лог выводит в консоль значение, тут же я его устанавливаю и пытаюсь вывести, но выводится пустая строка:
630d24fa704a8457239225.png
Вот объект useState если что:
const [passport, setPassport] = useState({
    series: "", // серия паспорта
    number: "", // номер паспорта
    dateOfBirth: "", // дата рождения
    passportIssueDate: "", // дата выдачи паспорта
    ouCode: "", // код подразделения
    placeOfBirth: "", // место рождения
    placeOfIssue: "" // паспорт выдан
 })
  • Вопрос задан
  • 532 просмотра
Решения вопроса 2
@viarmo
Попробуй вывести в консоль не поле, а сам объект. Дело в том, что состояние обновляется только после перерендера компонента. Если нужно получить доступ к уже обновлённому объекту после перерендера, нужно использовать хук useEffect.
Ответ написан
sanManjiro
@sanManjiro Автор вопроса
Решил я эту проблему, заключалась она в том, что я о приоре не правильно записывал значения в объект, нужно было писать не setPassport({...passport, placeOfIssue: value}), а что-то вроде такого:
useEffect (() => {
    PlaceOfIssueScript(
      (value) => setPassport(prevState => {
        return {...prevState, placeOfIssue: value }
      }),
      (value) => setPassport(prevState => {
        return {...prevState, ouCode: value.replace(/[^0-9]/g, '') }
      }),
      setStatusSelec
    )
  }, [passport])

Я не знаю почему не работал предыдущий способ, потому что по факту, мы делаем то же самое, берем наши объект и применяем на них спрутинг, а потом изменяем то значение в объекте, которое нам нужно изменить.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы