2017-04-19 1 views
0

Je charge un composant de réaction de manière dynamique (via l'import de webpack ('module'). Then) dans mon paquet. Le problème est que le composant ne réagira pas aux changements de Mobx observable. Si j'importe le module normalement, tout fonctionne.Le module dynamiquement importé dans la réaction ne réagira pas à Mobx observable

Regarder les outils MOBX dev je peux voir que lorsque le composant est importée statiquement lorsque les changements observables i voir:

Mise à jour '[email protected]': ([email protected]) (a (ReviewsStore @ 6.profile)) de réaction async programmé 'Commentaires # 0.render()' réaction '$ Commentaires # 0.render()'

Au contraire quand j'utilise le fractionnement du code que je ne vois pas render invoquaient :

Mise à jour de '[email protected]': ([email protected]) (was (ReviewsStore @ 6.profile))

Bellow est mon code avec des données de test

class ReviewsStore { // My store 
@observable profile = {}; 

@action 
getProfile() { 
    $.ajax({ url }) 
     .then(action((data) => { 
      this.profile = { 
       user: 'John Doe', 
       userid: 123, 
       followers: 25, 
       reviewsCount: 22, 
       reviews: [ 
        { 
         body: 'Lorem ipsum ', 
         date: '20/12/2016', 
         rating: 4.5, 
        }, 
        { 
         body: 'Lorem ipsum dolor sit', 
         date: '23/12/2016', 
         rating: 4.2, 
        }, 
       ], 
      }; 

     })); 
} 

}

@observer class Reviews extends Component { // My View 
constructor() { 
    super(); 
    this.getProfile = this.getProfile.bind(this); 
    this.state = { 
     asyncModule: null, 
    }; 
} 

getProfile(id) { 
    this.props.store.getProfile(id) 
    import('../components/reviews/user-profile') 
       .then(({ default: Profile }) => { 
        this.setState({ 
         asyncModule: <Profile user={this.props.store.profile} />, 
        }); 
       }); 
} 

render() { 
    return (
     <div> 
     {this.state.asyncModule} 
     </div> 
    ); 
} 

}

Répondre

0

Pourriez-vous vérifier package MOBX est inclus une seule fois? Seulement dans votre bundle de base et pas encore dans votre bundle de faisceaux?

+0

Mon composant séparé est seulement 4kb et je n'importent pas de mobx n'importe où dans ce fichier, car mon composant est un composant sans état, je ne sais pas si c'est important j'essaie juste de vous donner des indices. (J'ai essayé de le transformer en composant de classe et en ajoutant un décorateur d'observateur mais je ne vois aucun changement). –

+0

Mise à jour: J'ai fait l'application la plus basique juste pour vérifier si le problème reste et il est. Je vous serais reconnaissant si vous pouviez jeter un coup d'oeil quand vous trouvez le temps! vous pouvez le trouver [ici] (https://gitlab.com/Sgus/mobx-code-splitting-demo) (Btw grande discussion à Amsterdam réaction!) –

+0

Pourriez-vous déposer un problème dans le référentiel mobx? Il y a probablement des gens là-bas qui ont réellement l'expérience du partage de code :) – mweststrate