Vorrei passare un callback a un componente doppiamente annidato, e mentre sono in grado di passare le proprietà in modo efficace, non riesco a capire come associare il callback al componente corretto in modo che venga attivato. La mia struttura simile a questa:React.js come passare i callback ai componenti figlio?
-OutermostComponent
-FirstNestedComponent
-SecondNestedComponent
-DynamicallyGeneratedListItems
L'elenco degli elementi quando si fa clic dovrebbe innescare un callback che è il metodo OutermostComponents "onUserInput", ma invece ottengo "errore non rilevato: non definito non è una funzione". Sospetto che il problema riguardi il modo in cui eseguo il rendering di SecondNestedComponent nel primo e passando il callback. Il codice è simile al seguente:
var OutermostComponent = React.createClass({
onUserInput: //my function,
render: function() {
return (
<div>
//other components
<FirstNestedComponent
onUserInput={this.onUserInput}
/>
</div>
);
}
});
var FirstNestedComponent = React.createClass({
render: function() {
return (
<div>
//other components
<SecondNestedComponent
onUserInput={this.onUserInput}
/>
</div>
);
}
});
var SecondNestedComponent = React.createClass({
render: function() {
var items = [];
this.props.someprop.forEach(function(myprop) {
items.push(<DynamicallyGeneratedListItems myprop={myprop} onUserInput={this.props.onUserInput}/>);}, this);
return (
<ul>
{items}
</ul>
);
}
});
Come associare correttamente i callback ai componenti nidificati appropriati?
arn't il concetto di callback contro il paradigma a flusso di dati unidirezionale? – SuperUberDuper
No. Se leggi il tutorial di react, il passaggio dei callback dai componenti principali a quelli secondari è la parte del corso. https://facebook.github.io/react/docs/tutorial.html – gregturn
Nah man. React lega roba "automagicamente" per i metodi passati come "oggetti di scena" ai componenti figlio. Tecnicamente i callback sono ancora conformi alle idee di React ™ del flusso di dati unidirezionale perché il contesto è genitore (non da bambino) – williamle8300