react instalar example español ejemplos create app javascript reactjs

javascript - instalar - Un componente está cambiando una entrada no controlada de texto de tipo para controlar el error en ReactJS



react js installation (2)

La razón es, en el estado que definiste:

this.state = { fields: {} }

campos como objeto en blanco, por lo que durante la primera representación, this.state.fields.name no estará undefined , y el campo de entrada obtendrá un valor como:

value={undefined}

Debido a ese campo de entrada quedará incontrolado.

Una vez que ingrese cualquier valor en la entrada, los fields en estado se cambian a:

this.state = { fields: {name: ''xyz''} }

Y en ese momento el campo de entrada se convierte en un componente controlado, por eso está recibiendo el error:

Un componente está cambiando una entrada no controlada de texto de tipo a controlar.

Soluciones posibles:

1- Defina los fields en estado como:

this.state = { fields: {name: ''''} }

2- O defina la propiedad de valor utilizando la evaluación de cortocircuito de esta manera:

value={this.state.fields.name || ''''} // (undefined || '''') = ''''

Advertencia: Un componente está cambiando una entrada no controlada de texto de tipo para ser controlada. Los elementos de entrada no deben cambiar de no controlado a controlado (o viceversa). Decida entre usar un elemento de entrada controlado o no controlado durante la vida útil del componente.

Mi código:

constructor(props) { super(props); this.state = { fields: {}, errors: {} } this.onSubmit = this.onSubmit.bind(this); } .... onChange(field, e){ let fields = this.state.fields; fields[field] = e.target.value; this.setState({fields}); } .... render() { return( <div className="form-group"> <input value={this.state.fields["name"]} onChange={this.onChange.bind(this, "name")} className="form-control" type="text" refs="name" placeholder="Name *" /> <span style={{color: "red"}}>{this.state.errors["name"]}</span> </div> ) }


Establecer el estado actual primero ...this.state

Es porque cuando va a asignar un nuevo estado puede ser indefinido. por lo que se solucionará configurando el estado extrayendo el estado actual también

this.setState({...this.state, field})

Si hay un objeto en su estado, debe establecer el estado de la siguiente manera, supongamos que debe establecer el nombre de usuario dentro del objeto de usuario.

this.setState({user:{...this.state.user, [''username'']: username}})