I am trying to set a default value to a TextField, with data obtained from a GetMapping call, but it does not set.
This is the information I get on the call
{
"id": 1,
"motivoConsulta": "Lorem",
"objetivosClinicos": "Lorem",
"otraInformacion": "Lorem",
"expectativas": "Lorem"
}
this is my code
class Iconsulta extends React.Component {
constructor(props) {
super(props);
}
state = {
info: [],
form: {
motivoConsulta: "",
expectativas: "",
objetivosClinicos: "",
otraInformacion: "",
},
};
componentDidMount() {
this.getInfo();
}
getInfo = async () => {
let res = await axios.get(
`http://localhost:8080/expediente/findById/${this.props.id}`
);
let data = res.data;
//console.log(data);
this.setState({
info: data,
});
console.log(this.state.info);
};
render() {
return (
<>
<div className="form-section-consulta">
<Title
titulo="Informacion de la consulta"
description="Motivacion y expectativas para el seguimiento"
/>
<form onSubmit={this.manejadorSubmit}>
in this section is where I try to set the value with default Value, but it is not set with the data obtained from the API call
<TextField
className="input-txt"
id="outlined-name"
label="Motivo de la consulta"
name="motivoConsulta"
onChange={this.manejadorChange}
defaultValue={this.state.info.motivoConsulta}
// helperText="Please enter your name"
/>
<TextField
className="input-txt"
id="outlined-name"
label="Expectativas"
name="expectativas"
onChange={this.manejadorChange}
defaultValue={this.state.info.expectativas}
/>
<TextField
className="input-txt"
id="outlined-name"
label="Objetivos clinicos"
name="objetivosClinicos"
onChange={this.manejadorChange}
defaultValue={this.state.form.objetivosClinicos}
/>
<TextField
className="input-txt"
id="outlined-name"
label="Otras Informaciones"
name="otraInformacion"
onChange={this.manejadorChange}
/>
</form>
</div>
</>
);
}
}
CodePudding user response:
It looks like you are using your TextField components in uncontrolled mode. This means, the defaultValue is set when your component mounts. At this time, the GetMapping call is still executing asynchronously and this.state.info is still empty.
After the GetMapping call returns, this.state.info will be updated, but the defaultValue for the text fields remains unchanged.
To fix this, use your components in controlled mode. Try replacing the defaultValue property for yoru TextField components with value - this is how most UI libraries distinguish between controlled and uncontrolled mode.
