Descripción, pasos para reproducir y ejemplo de caja de arena, ver # 17022.
La función nativa de autocompletar de Firefox todavía no funciona.
Esto también afecta a otros marcos (antd, material UI):
Sería bueno si alguien de la comunidad de react pudiera intentarlo porque creo que el autocompletado nativo es una característica de UX muy importante.
He investigado esto y parece suceder porque React establece el defaultValue
del nodo DOM de entrada en el actual value
para entradas controladas. Cuando envías algo en Firefox donde node.value === node.defaultValue
no lo guarda para autocompletar. No está documentado en ninguna parte, acabo de enterarme de las pruebas (sin React también).
Eliminar esto "" resuelve "" el problema:
https://github.com/facebook/react/blob/1d85bb3ce13401644a5e345f8bc84522c59a951c/packages/react-dom/src/client/ReactDOMInput.js#L420
La razón por la que React asigna defaultValue
al value
actual es porque si tiene una entrada con type="reset"
y hace clic en ella, obtendrá campos en blanco en su control entradas si eliminó esa línea (la próxima repetición las arreglaría). Al menos es lo que entiendo al navegar por el código.
Puede hacer que el autocompletar / autocompletar funcione en Firefox en una entrada controlada haciendo que defaultValue
devuelva una cadena vacía:
function handleChange(event) {
Object.defineProperty(event.target, "defaultValue", {
configurable: true,
get() { return "" },
set() {},
});
setValue(event.target.value);
}
Esto funciona siempre que no tenga un type="reset"
. De lo contrario, notará que todos los campos se restablecen como en blanco (sin embargo, la siguiente representación los corrige). Sin embargo, no recomendaría esto, es un "truco" y no lo he usado en ninguna parte para poder decir que es 100% confiable.
De todos modos, esto es probablemente un error en Firefox ... o una característica- (¿error?) Pero no he encontrado nada en las especificaciones, MDN o en otro lugar que describa por qué node.value === node.defaultValue
debería rescatar el ahorro para autocompletar 🤷♀️
Estoy / estaba trabajando en un PR para resolver esto ... pero, ¿tal vez Firefox podría resolverlo de su lado? 🙈 (no está claro si es un error)
Sería genial saber si alguien del equipo central de React está al tanto del problema y / o qué podemos hacer al respecto.
Editar: esta es una demostración que demuestra el problema en Firefox. Es un código JS simple de HTML + 3 líneas:
https://codesandbox.io/s/naughty-feather-vwl6v?file=/index.html
Entonces no es un problema de React per se 🤔
Si alguien interesado, abrí esto:
https://bugzilla.mozilla.org/show_bug.cgi?id=1642570
😅
Creo que esto es un duplicado de # 15739
Comentario más útil
He investigado esto y parece suceder porque React establece el
defaultValue
del nodo DOM de entrada en el actualvalue
para entradas controladas. Cuando envías algo en Firefox dondenode.value === node.defaultValue
no lo guarda para autocompletar. No está documentado en ninguna parte, acabo de enterarme de las pruebas (sin React también).Eliminar esto "" resuelve "" el problema:
https://github.com/facebook/react/blob/1d85bb3ce13401644a5e345f8bc84522c59a951c/packages/react-dom/src/client/ReactDOMInput.js#L420
La razón por la que React asigna
defaultValue
alvalue
actual es porque si tiene una entrada contype="reset"
y hace clic en ella, obtendrá campos en blanco en su control entradas si eliminó esa línea (la próxima repetición las arreglaría). Al menos es lo que entiendo al navegar por el código.Puede hacer que el autocompletar / autocompletar funcione en Firefox en una entrada controlada haciendo que
defaultValue
devuelva una cadena vacía:Esto funciona siempre que no tenga un
type="reset"
. De lo contrario, notará que todos los campos se restablecen como en blanco (sin embargo, la siguiente representación los corrige). Sin embargo, no recomendaría esto, es un "truco" y no lo he usado en ninguna parte para poder decir que es 100% confiable.De todos modos, esto es probablemente un error en Firefox ... o una característica- (¿error?) Pero no he encontrado nada en las especificaciones, MDN o en otro lugar que describa por qué
node.value === node.defaultValue
debería rescatar el ahorro para autocompletar 🤷♀️Estoy / estaba trabajando en un PR para resolver esto ... pero, ¿tal vez Firefox podría resolverlo de su lado? 🙈 (no está claro si es un error)
Sería genial saber si alguien del equipo central de React está al tanto del problema y / o qué podemos hacer al respecto.
Editar: esta es una demostración que demuestra el problema en Firefox. Es un código JS simple de HTML + 3 líneas:
https://codesandbox.io/s/naughty-feather-vwl6v?file=/index.html
Entonces no es un problema de React per se 🤔