Material-UI TextField не обновляет значение при использовании setValue формы реакции-крючка

Я пытаюсь установить новое значение, которое я получаю от реквизита, а затем обновляю компонент TextField с помощью setValue библиотеки response-hook-form.

Проблема в том, что значение иногда остается пустым, а иногда метка не плавает (сжимается).

Codesandbox (обратите внимание, что я создал компонент-оболочку для TextField там) https://codesandbox.io/s/romantic-bird-tq4sf?file=/src/App.js


person Community    schedule 07.01.2021    source источник


Ответы (2)


Что ж, если метка не плавает или не сжимается, тогда значение, которое вы пытаетесь вставить в поле, будет просто пустой строкой, тогда я полагаю? Также подумайте о полном удалении массива зависимостей из useEffect следующим образом:

useEffect(() => {
  // Code here
})

вместо этого:

useEffect(() => {
  // Code here
}, [.....]) <-- REMOVE THAT ARRAY

Может быть, попробовать - в сочетании с предыдущим ответом?

person Ben Neighbour    schedule 08.01.2021

  setValue("business_name", "netanel" || someData);

Этот код перезаписывает значение. Этот код записывает netanel в поле, если это правда, что всегда так. Проблема с подключением.

Делай это так:

  setValue("business_name", someData);

Так что someData всегда определяется.

Поскольку вы уже определяете запасное значение в уничтожении здесь: { someData = "netanel" }

Обновление:

Чтобы предотвратить ошибку метки, вам необходимо определить значение по умолчанию, чтобы переданное начальное значение не было нулевым или неопределенным.

Так что измените текстовое поле на это:

 <Controller
    as={MuiTextField}
    name={name}
    control={control}
    label={label}
    defaultValue=""
  />

и это работает.

person Domino987    schedule 07.01.2021
comment
Привет, я обновил codeandbox. пожалуйста, посмотрите случай сейчас: codeandbox.io/s/romantic -bird-tq4sf? file = / src / App.js - person ; 08.01.2021
comment
Хорошо, что ты пытаешься сделать? Вы скачиваете сайт? И вы удалили значение по умолчанию для некоторых данных. - person Domino987; 08.01.2021
comment
Нет, это какой-то фиктивный api, который я туда положил. В моем исходном проекте я беру какое-то обычное строковое значение и пытаюсь вставить его в TextField. Проблема в том, что плавающая метка не сжимается и не плавает при поступлении значения. - person ; 08.01.2021
comment
@NetanelVaknin, я обновил свой ответ - person Domino987; 08.01.2021