Ich versuche eine CRUD-Beispielanwendung mit React- und React-Router zu erstellen, und ich kann nicht herausfinden, warum der Status nicht in eine Kindkomponente übergeht, wie ich bin erwartet es zu. Wenn ich die Route edit
ankreuze, rendert es die Komponente Edit
, die das Kätzchen, das ich will, aus der Datenbank holt und seine Informationen an eine Formular-Komponente sendet, die sowohl zum Bearbeiten eines vorhandenen Kätzchens als auch zum Hinzufügen eines neuen Kätzchens verwendet wird.Status in untergeordnete Komponente übergeben, da Requisiten nicht funktionieren
Hier ist die Komponente bearbeiten:
import React, { Component } from 'react';
import axios from 'axios';
import { match } from 'react-router-dom';
import Form from './Form';
export default class Edit extends Component {
constructor(props) {
super(props)
this.state = {}
}
componentDidMount() {
axios.get(`/updateKitten/${this.props.match.params.id}`)
.then(res => {
const kitten = res.data
this.setState({ kitten })
console.log(this.state.kitten.name) //Sammy, or something
})
.catch(err => console.log(err))
}
render() {
return (
<Form
name={this.state.kitten.name} // throws error or undefined
description={this.state.kitten.description} //throws error or undefined
route={this.props.match.params.id}
/>
)
}
}
Die Edit-Komponente übergibt Namen, die Beschreibung und die Route zu diesem Formular Komponente:
import React, { Component } from 'react';
import axios from 'axios';
export default class Add extends Component {
constructor(props) {
super(props)
this.state = { name: this.props.name, description: this.props.description}
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(e) {
const name = e.target.name;
const value = e.target.value;
this.setState({
[name]: value
});
}
handleSubmit(e) {
axios.post(`/addKitten/${this.props.route}`, this.state)
.then(this.setState({ name: '', description: '' }))
e.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>Name</label>
<input type='text' name="name" value={this.state.name}
onChange={this.handleChange}/>
<label>Description</label>
<input type='text' name="description" value={this.state.description}
onChange={this.handleChange}/>
<input type='submit' value='Submit' />
</form>
)
}
}
Und bekomme ich folgende Fehlermeldung:
bundle.js:28950 Uncaught TypeError: Cannot read property 'name' of undefined
von versuchen, diese Informationen als pr zu senden ops zu der Form
Komponente.
Was mache ich falsch?