Mi chiedo come funzionano ES6 e cloneElement quando si passa a una funzione. Ho bisogno di fare riferimento allo stato nello stato del componente genitore ma i riferimenti this
si riferiscono al componente figlio e non al genitore.Reagire, "questo", cloneElement e es6
Di seguito è riportato il codice in JavaScript normale per farlo funzionare, dopo averlo scritto per la prima volta in ES6 e sbattendo la testa sulla tastiera, ho deciso di vedere se era ES6, quindi ho refactored e funziona perfettamente.
Voglio solo scriverlo in ES6 perché tutto il resto è, ma questo mi ha messo in difficoltà.
Questo è il mio componente ES5:
var Parent = React.createClass({
content: function() {
return React.Children.map(this.props.children, function(child) {
return React.cloneElement(child, {
passThisFunc: this.passThisFunc
})
}.bind(this));
},
passthisfunc: function(component) {
// returns the components props
console.log(this);
// Returns the component so I can do component.props.name
console.log(component);
},
render: function() {
return (
<div>
{ this.content }
</div>
)
}
});
E poi nei suoi figli:
var Child = React.createClass({
componentDidMount: function() {
this.props.passThisFunc(this);
}
render: function().....
});
I componenti non sono poi così diversi in ES6, è davvero quello che fa riferimento quando this
viene registrato .
Qualsiasi aiuto nel refactoring (in particolare la componente padre) sarebbe molto apprezzato.
Modifica Ecco l'ES6 Esempio ho provato:
class Parent extends React.Component {
content() {
return React.Children.map(this.props.children, function(child) {
return React.cloneElement(child, {
passThisFunc: this.passThisFunc
})
}.bind(this));
}
passthisfunc(component) {
// returns the components props
console.log(this);
// Returns the component so I can do component.props.name
console.log(component);
}
render() {
return (
<div>
{ this.content }
</div>
)
}
};
class Child extends React.Component {
componentDidMount() {
this.props.passThisFunc(this);
}
render(){...}
};
Potete per favore correggere gli errori di sintassi nel 'content'? – Bergi
ES6 non cambia nulla su come 'questo' funzioni. Che valore ti aspettavi per "questo" se non "child.props"? – Bergi
Quello che ho in 'content' è essenzialmente lo stesso di quello che ho nella mia attuale implementazione e funziona perfettamente, quali sono gli errori di sintassi? Anche sulla seconda domanda voglio fare qualcosa del tipo: 'this.setState ({test: 'test'})' Quindi immagino che mi aspetto che questo sia uguale al componente padre in modo simile fa in ES5. –