ich eine Benutzeroberfläche erstellen Reagieren bin mit und ich habe eine übergeordnete Komponente und eine untergeordnete Komponente, etwas in dieser Richtung:Reagieren: Kann Kind Requisiten im Eltern Event-Handler für den Zugriff auf
// Child component
var ListItem = React.createClass({
render: function() {
var link_details = (
<div>
Start Date: {this.props.my_data.start_date}<br/>
End Date: {this.props.my_data.end_date}<br/>
</div>
);
return (
<li>
<a onClick={this.props.clickHandler}>
{ this.props.my_data.name }
</a>
{link_details}
</li>
)
}
});
// Parent component
var Sidebar = React.createClass({
getInitialState: function() {
return {
my_data: [],
};
},
handleListItemClick: function(e){
console.log(e.target);
console.log(e.target.props);
},
render: function() {
var myLinks = this.state.my_data.map(function(mylink) {
return (
<ListItem key={mylink.id} my_data={mylink} clickHandler={this.handleListItemClick} />
);
}.bind(this));
return (
<div>
<ul className="nav nav-sidebar">
{ myLinks }
</ul>
</div>)
}
});
möchte ich den Klick Ereignis auf dem Kind, um den Handler des Elterns auszulösen, so dass das Elternteil seinen Zustand basierend auf dem, worauf im Kind geklickt wurde, aktualisieren kann. Während der Code, den ich oben habe, funktioniert, und der Handler des Elternteils aufgerufen wird, kann ich auf keine Requisiten der untergeordneten Komponente zugreifen. Ich bin nicht sicher, ob das von Entwurf ist und ich Daten auf andere Weise vom Kind zum Elternteil weiterleiten sollte, oder wenn ich etwas falsch mache. Ich bin immer noch sehr neu in React, daher ist jeder Rat gefragt. Vielen Dank!
Ich habe es versucht und obwohl es scheint zu funktionieren, erhalte ich eine Warnung in meiner Konsole: 'Warnung: bind(): Reagiere Komponentenmethoden können nur an die Komponenteninstanz gebunden werden.' Ändern der '.bind (this, this.props .my_data_name') zu '.bind (null, this.props.my_data_name)' beseitigt den Fehler, aber ich bin mir nicht sicher, was die Konsequenzen dieser Änderung sind. – Joseph
'{this.props.clickHandler.bind (null, this.props.my_data_name)}} ist der richtige Weg, dies zu tun. – WitVault
Bearbeitete die Antwort. – WitVault