React no hace que el autocompletado esté desactivado


81

¿Cómo hago para reaccionar renderizarlo?

<input
    id={field.name}
    className="form-control"
    type="text"
    placeholder={field.name}
    autocomplete="off"
    {...field}/>

Respuestas:


154

Capital "C" autoComplete. Esto se menciona en la documentación de React:

https://facebook.github.io/react/docs/tags-and-attributes.html


16
Siempre lanza una excepción, no solo ignora silenciosamente los errores.
Yaroslav

1
@Yaroslav Es posible que React arroje una advertencia para esto, de lo contrario, github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/…
azium

1
Pero también, no es un error porque los accesorios pueden ser cualquier cosa ... ¿cómo sabe React cuando estás haciendo tu propio accesorio o usando un atributo html?
azium

Los accesorios no pueden ser nada para las etiquetas html.
Yaroslav

Entiendo por qué pensaría que ese es el caso, pero recuerde que estas etiquetas JSX se transfieren a llamadas de función con una cadena que representa el tipo de etiqueta.
azium

64

Deberías poner:

autoComplete="new-password"

Esto eliminará el autocompletado


13
Realmente no entiendo por qué esto funciona en lugar de "desactivado". Extraño.
Ajay


@Pim Tiene sentido. ¡Gracias!
Ajay

1
¡Eres una leyenda, gracias! También tiene sentido, quería que mi campo de nueva contraseña no se completara automáticamente: D
Erik Kubica

Probablemente Chrome esté reconociendo newdentro del nombre. Lo nombré ahora, lo autoComplete="new-off"que tiene un poco más de sentido para mí si no es un campo de contraseña y funciona bien: D
Kenny

7

De acuerdo con la documentación de Mozilla , debe establecer un valor no válido para realmente desactivar el autocompletado. En algunos navegadores, las sugerencias de autocompletar aún se ofrecen aunque el atributo esté desactivado.

Esto funcionó para mí (react-bootstrap):

<FormControl
  value={this.state.value}
  autoComplete="nope"
  {...props}
/>

Vaya, eso es extraño, pero es lo único que me ha funcionado hasta ahora.
Wylliam Judd

1
@Pim Mmm es lo mismo autocompletey autofill? Porque no me funciona con Chrome. Sigue autocompletando el formulario con los valores anteriores enviados con el mismo formulario.
alexventuraio

6

Si ha leído la respuesta correcta y todavía tiene este problema (especialmente en Chrome), bienvenido al club ... así que compruebe cómo lo he logrado:

<form autoComplete="new-password" ... >
        <input name="myInput" type="text" autoComplete="off" id="myInput" placeholder="Search field" />
</form>

Notas

  • El formulario no tiene que ser necesariamente el padre directo del elemento de entrada.
  • la entrada necesita un atributo de nombre
  • también funciona con la <FormControl/>etiqueta React-Bootstrap (en lugar de <input/>)

No funciona. Estoy probando con Chrome 67. Nada. Todavía necesito una entrada falsa con pantalla: ¡ninguna! ¡Muy loco!

gracias por sus comentarios, pero ¿su caso marca las 3 notas con viñetas?
w3jimmy

En algunos casos, todavía recibía autosugestiones con esto. Vea mi respuesta para una solución más completa.
Pim

3

autoComplete = "none" - funciona para mí.


2
Bienvenido Alex. Trate de ser más detallado con su respuesta. Poner en evidencia que su solución funciona debido a la carcasa de "autocompletar" es importante.
Jennifer Goncalves

3

Ninguna de estas soluciones funcionó realmente en Chrome 80.

Después de horas de prueba y error, este truco muy extraño funcionó para mí:

  1. Agregar autoComplete="none"a cada uno <input>: Google omite autocomplete = "off" ahora
  2. Envuelva sus campos en un contenedor: <form>o<div>
  3. Necesita al menos un campo de entrada válido con autoComplete="on". Este debería ser el último elemento del contenedor. Entonces agregué el siguiente campo de entrada al final de mi formulario:
<input 
  type="text" 
  autoComplete="on" 
  value="" 
  style={{display: 'none', opacity: 0, position: 'absolute', left: '-100000px'}} 
  readOnly={true}
/>

1

El infierno de autocompletado de Chrome se apaga agregando el atributo de nueva contraseña.

autoComplete="new-password"

En acción se ve así:

<input            
type="password"
autoComplete="new-password"
/>

más discusión sobre:

Discusión de Autocompletar de Chrome


0

Además de la respuesta de @ azium, <input>debe colocarse dentro de la <form>etiqueta, luego autoCompletefunciona


0

Lo resolví con solo una línea:

Si usa la forma recomendada con "changeHandler ()" y el estado de los componentes, simplemente inserte:

changeHandler = (e) => {    
  if (!e.isTrusted) return;
  ... your code
}

Más información sobre ese changeHandler () - Thing:
https://reactjs.org/docs/forms.html#controlled-components


2
cuando google chrome autocompleta mi entrada, e.isTrusted es verdadero: D
IvanY

0

También probé muchas opciones, pero lo que terminé haciendo fue reemplazar la <form>etiqueta con la <div>etiqueta y administrar manualmente cada entrada que tenía en ese formulario.


0

Aquí está el "Funciona en mi máquina"

Versión de Chrome 83.0.4103.116 y React. Parece que el truco que funcionó para mí es ponerlo dentro de un formulario y agregar el atributo autoComplete . Aviso Si prueba esto en una aplicación que no reacciona, tendrá que completar el autocompletado con una C minúscula

 <form autoComplete="off">
      <input type="text" autoComplete="new-password" />
 </form>

y

<form autoComplete="new-password">
  <input type="text" autoComplete="new-password" />
</form>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.