Ich habe 3 Komponenten in React, einer fungiert als ein Container, der meine untergeordneten Komponenten weitergibt, um in einem Formular gerendert zu werden. Wenn das Formular gesendet wird, möchte ich jede der untergeordneten Komponenten in meiner übergeordneten Komponente abrufen, durch jede einzelne Schleife führen, ein Objekt erstellen, das mein Server erwartet, und dann die Liste der Objekte an den Server zurücksenden. Ich habe Schwierigkeiten, auf die untergeordneten Komponenten in meiner onSubmit-Funktion in meiner übergeordneten Komponente zuzugreifen.Übergeben Sie Daten von Kind zu Eltern in React
Hier ist meine Mutterkomponente
ParentFixturesComponent.js
class ParentFixturesComponent extends Component {
constructor() {
super();
this.state = {
numChildren: 0,
};
}
onAddMatch() {
this.setState({
numChildren: this.state.numChildren + 1
});
}
onSubmit(e) {
e.preventDefault();
// loop through the child components
// create a match object with them
// var match = {
// id: uuid(),
// title: uuid(),
// start: e.something,
// end: e.something,
// };
console.log("submit works");
}
render() {
const children = [];
for (let i = 0; i < this.state.numChildren; i += 1) {
children.push(<SingleMatchForm key={uuid()}/>)
}
return (
<Fixtures addMatch={this.onAddMatch.bind(this)} save={this.onSubmit.bind(this)} >
{children}
</Fixtures>
);
}
}
export default ParentFixturesComponent;
Komponente, die meine Form hält, wo meine Eltern alle meine Kinder Komponenten
ChildFixturesContainer.js
class Fixtures extends Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
}
handleChange(name) {
this.console.log(this.props);
}
render() {
return (
<div className="tray tray-center">
<div className="row">
<div className="col-md-8">
<div className="panel mb25 mt5">
<div className="panel-heading">
<span className="panel-title">Fixtures</span>
</div>
<div className="panel-body p20 pb10">
<div id="fixture-parent" onChange={this.handleChange.bind(this)}>
{this.props.children}
</div>
</div>
<div className="section-divider mb40" id="spy1"> </div>
<button className="btn btn-primary tm-tag" onClick={this.props.addMatch}>Add Match</button>
<button className="btn btn-alert tm-tag" onClick={this.props.save}>Save</button>
</div>
</div>
</div>
</div>
);
}
}
export default Fixtures;
rendert Und schließlich mein Kind individuelle Form c Komponente. mit props
SingleMatchComponent.js
class SingleMatchForm extends Component {
constructor() {
super();
this.state = {
startDate: moment()
};
}
handleChange(date) {
this.setState({
startDate: date
});
}
render() {
return (
<div className="row">
<div key={this.props.id} className="form-group">
<label className="control-label col-md-2">New Match</label>
<div className="col-md-6">
<DatePicker
selected={this.state.startDate}
onChange={this.handleChange.bind(this)}/>
<div className="section-divider mb40" id="spy1"> </div>
</div>
</div>
</div>
);
}
}
export default SingleMatchForm;
Hallo Nick, du solltest Funktionen als Requisiten von Eltern zu Kind weitergeben, die als Callbacks fungieren. Wenn also die Funktion onSubmit() aufgerufen wird, haben Sie alle Daten in Ihrem übergeordneten Komponentenstatus. Für Beispielcode beziehen sich auf diesen Faden http://stackoverflow.com/questions/38394015/how-to-pass-data-from-child-component-to-its-parent-in-reactjs –