J'essaie d'importer une classe dans une classe de réaction, mais lorsque l'objet change dans la classe, il renvoie indéfini.
class Test {
constructor(){
this.obj = {}
}
testFunc(){
this.obj.one = 'two'
// this returns the value
console.log(this.obj.one)
}
}
class App extends Component{
constructor(){
super()
this.testClass = new Test()
}
componentDidMount(){
this.testClass.testFunc()
// this returns undefined
console.log(this.testClass.obj.one)
}
}
3 Réponses :
Je pense que vous avez manqué de rendu sur l'application Composant:
constructor(){
this.obj = {};
}
testFunc() {
this.obj.one = 'two';
// this returns the value
console.log(this.obj.one);
}
}
class App extends React.Component{
constructor(){
super()
this.testClass = new Test();
}
componentDidMount(){
this.testClass.testFunc();
console.log('value =>', this.testClass.obj.one);
}
render() {
return <div />;
}
}
ReactDOM.render(
<App />,
document.getElementById('root')
);
Je pense, si vous souhaitez utiliser console.log (this.testclass.obj.one) code> Vous devez retourner cette clé em> em> Travaillez dans testfunc () code> strong> fonction p>
Le ceci code> dans l'expression this.testclass.obj.one code> fait référence à l'instance de app code>. Si vous retournerez ceci code> à partir de testfunc code>, vous obtenez une instance de test code>. Étant donné que app code> a déjà une instance de test code> attribué à this.testclass code> et c'est la idem i> instance Ceci.TestClass.tsfuncunc () CODE> reviendrait, il n'est pas pertinent s'il le renvoie ou non.
I have done few tweaks. Your code is working fine and returning the expected results. you can check the fiddle:JS Fiddle
Êtes-vous sûr? Dis-tu
this.testclass.tesfuncunc () code> sortiesdeux code> maisconsole.log (thisestclass.obj.one) code> sortiesindéfini code>? parce que, en supprimant les trucs de réactjs de votre code, cela fonctionne bienPeut-être que vous ne voyez pas un
2 code> sur la sortie de la console qui signifieraitdeux code> a été envoyé à la console deux fois i> - et lenon défini code> est de quelque chose d'autre ... Essayezconsole.log ('in composentdidmount', cela.testclass.obj.one) code>ok donc si je fais
console.log (this.testclass.obj) code> chrome console ne montrera que{} code> mais si je définis une valeur dans le constructeur de la classe de testthis.obj = {test: "test"} code> qui affichera{test: "test"} code> dans la console chromePourrait-il être que vous n'êtes pas contraignant la méthode code> TestFuncC code> à votre classe code> classe code>? Essayez d'ajouter cette ligne à votre constructeur:
this.tesfunc = ceci.testfunc.bind (this) code>a toujours le même résultat
Dans la console Chrome, les valeurs montrent si j'élans l'objet
Cela ressemble à un problème d'async typique. Vous accédez à la propriété avant qu'il ait été défini. Votre code actuel doit être différent. S'il vous plaît poster un meilleur exemple. Mais probablement un duplicata de Pourquoi ma variable est-elle non altérée après que je la modifie à l'intérieur d'une fonction? - Référence de code asynchrone .
Je pense que vous pourriez avoir raison