I have two issue here.
defaultValue
in TextField
. I'm using reactjs materialTextField
. It's throwing error in belowCannot read property 'map' of undefined
Can anyone tell where I made mistake?
ShipmentDetail.tsx
interface ShipmentInterface { detail: any; } export class ShipmentDetail extends Component<any, ShipmentInterface> { constructor(props: any) { super(props); this.state = { detail: '' }; this.handleChange = this.handleChange.bind(this); // nameUpdate: this.state.detail.name; } componentDidMount() { this.getShipmentDetail(); } getShipmentDetail() { let { params } = this.props.match; params = params.id; axios .get(`http://localhost:3001/shipments/${params}`) .then((response: any) => { this.setState({ detail: response.data }); }); } handleChange = (event: any) => { event.preventDefault(); this.setState({ detail: { name: event.target.value } }); }; render() { return ( <Card className="Card"> <CardContent className="Card-Content"> <Grid container spacing={3}> <Grid item xs={12}> <div className="Card-Content__Header"> <TextField id="outlined-name" label="Name" defaultValue={this.state.detail.name || ''} className="Card-Content__Header--Title" onChange={this.handleChange} fullWidth={true} margin="normal" variant="outlined" /> </div> </Grid> // I believe second error comes from here <Grid item xs={12} className="Card-Content__Table"> {this.state.detail && this.state.detail.cargo.map((item: any, index: number) => ( <CargoList key={index} value={item} /> ))} </Grid> </Grid> </CardContent> </Card> ); } } export default ShipmentDetail;
db.json
{ "id": "S1002", "name": "PO89634, PO27X", "cargo": [ { "type": "Bikes model 27X", "description": "100 Bikes model 27X", "volume": "100" } ], "mode": "air", "type": "LCL", "destination": "Saarbrücker Str. 38, 10405 Berlin", "origin": "Shanghai Port", "services": [ { "type": "customs" } ], "total": "10000", "status": "COMPLETED", "userId": "U1001" }
The second error is because you're overwriting your state, you need to make sure you preserve the other props on detail
, particularly cargo
array:
handleChange = (event: any) => {
event.preventDefault();
this.setState({
detail: {
...this.state.detail,
name: event.target.value
}
});
};
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.