Описание, шаги по воспроизведению и пример песочницы см. # 17022!
Встроенная функция автозаполнения из firefox по-прежнему не работает.
Это также влияет на другие фреймворки (antd, material UI):
Было бы неплохо, если бы кто-нибудь из сообщества React мог попробовать, потому что я думаю, что нативное автозаполнение - очень важная функция UX.
Я изучил это, и, похоже, это происходит, потому что React устанавливает defaultValue
входного узла DOM на текущий value
для контролируемых входов. Когда вы отправляете что-то в Firefox, где node.value === node.defaultValue
это не сохраняется для автозаполнения. Это нигде не задокументировано, я только что узнал о тестировании (тоже без React).
Удаление этого «решает» проблему:
https://github.com/facebook/react/blob/1d85bb3ce13401644a5e345f8bc84522c59a951c/packages/react-dom/src/client/ReactDOMInput.js#L420
Причина, по которой React назначает defaultValue
текущему value
заключается в том, что если у вас есть ввод с type="reset"
и вы щелкнете по нему, вы получите пустые поля в контролируемых вами input, если вы удалили эту строку (хотя следующая повторная визуализация исправит их). По крайней мере, это то, что я понимаю, просматривая код.
Вы можете заставить автозаполнение / автозаполнение работать в Firefox на контролируемом вводе, заставив defaultValue
вернуть пустую строку:
function handleChange(event) {
Object.defineProperty(event.target, "defaultValue", {
configurable: true,
get() { return "" },
set() {},
});
setValue(event.target.value);
}
Это работает до тех пор, пока у вас нет type="reset"
. В противном случае вы заметите, что все поля сброшены как пустые (хотя следующая повторная визуализация исправляет их). Я бы не рекомендовал это делать, это «взлом», и я нигде не использовал его, чтобы сказать, что он на 100% надежен.
В любом случае, это, вероятно, ошибка в Firefox ... или функция (ошибка?), Но я не нашел ничего в спецификациях, MDN или где-либо еще, что описывает, почему node.value === node.defaultValue
следует отказаться от сохранения для автозаполнения 🤷♀️
Я работаю над PR, чтобы решить эту проблему ... но, может быть, Firefox сможет решить эту проблему на их стороне? 🙈 (неясно, ошибка ли это)
Было бы здорово узнать, знает ли кто-нибудь из основной команды React о проблеме и / или о том, что мы можем с этим сделать.
Изменить: это демонстрация, демонстрирующая проблему в Firefox. Это простой HTML + 3-строчный JS-код:
https://codesandbox.io/s/naughty-feather-vwl6v?file=/index.html
Так что это не проблема React как таковая 🤔
Если кому интересно, открыл вот это:
https://bugzilla.mozilla.org/show_bug.cgi?id=1642570
😅
Я считаю, что это дубликат № 15739
Самый полезный комментарий
Я изучил это, и, похоже, это происходит, потому что React устанавливает
defaultValue
входного узла DOM на текущийvalue
для контролируемых входов. Когда вы отправляете что-то в Firefox, гдеnode.value === node.defaultValue
это не сохраняется для автозаполнения. Это нигде не задокументировано, я только что узнал о тестировании (тоже без React).Удаление этого «решает» проблему:
https://github.com/facebook/react/blob/1d85bb3ce13401644a5e345f8bc84522c59a951c/packages/react-dom/src/client/ReactDOMInput.js#L420
Причина, по которой React назначает
defaultValue
текущемуvalue
заключается в том, что если у вас есть ввод сtype="reset"
и вы щелкнете по нему, вы получите пустые поля в контролируемых вами input, если вы удалили эту строку (хотя следующая повторная визуализация исправит их). По крайней мере, это то, что я понимаю, просматривая код.Вы можете заставить автозаполнение / автозаполнение работать в Firefox на контролируемом вводе, заставив
defaultValue
вернуть пустую строку:Это работает до тех пор, пока у вас нет
type="reset"
. В противном случае вы заметите, что все поля сброшены как пустые (хотя следующая повторная визуализация исправляет их). Я бы не рекомендовал это делать, это «взлом», и я нигде не использовал его, чтобы сказать, что он на 100% надежен.В любом случае, это, вероятно, ошибка в Firefox ... или функция (ошибка?), Но я не нашел ничего в спецификациях, MDN или где-либо еще, что описывает, почему
node.value === node.defaultValue
следует отказаться от сохранения для автозаполнения 🤷♀️Я работаю над PR, чтобы решить эту проблему ... но, может быть, Firefox сможет решить эту проблему на их стороне? 🙈 (неясно, ошибка ли это)
Было бы здорово узнать, знает ли кто-нибудь из основной команды React о проблеме и / или о том, что мы можем с этим сделать.
Изменить: это демонстрация, демонстрирующая проблему в Firefox. Это простой HTML + 3-строчный JS-код:
https://codesandbox.io/s/naughty-feather-vwl6v?file=/index.html
Так что это не проблема React как таковая 🤔