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}/>
Yaroslav
fuente

Respuestas:

154

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

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

azium
fuente
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

JpCrow
fuente
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}
/>
Pim
fuente
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/>)
w3jimmy
fuente
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í.

Alexander Utrobin
fuente
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}
/>
mscott2005
fuente
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

Saqy G
fuente
0

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

Monsoir
fuente
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

Marcel Ennix
fuente
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.

radu ghitescu
fuente
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>
devpato
fuente