2017-10-18 12 views
0

Je veux réinitialiser une pile et de naviguer à deux pas. Ce modèle fonctionne bien:profonde Naviguer sans instancier les composants intermédiaires

import { NavigationActions } from 'react-navigation' 

const resetAction = NavigationActions.reset({ 
    index: 1, 
    actions: [ 
    NavigationActions.navigate({ routeName: 'List'}), 
    NavigationActions.navigate({ routeName: 'Detail', params: {id: theId}) 
    ] 
}) 
this.props.navigation.dispatch(resetAction) 

Mais il y a un problème. Je ne veux pas rendre la liste. La page Détails récupère l'élément à partir du serveur en fonction de theId. Cependant, avant cela, la liste récupérera tous les éléments du serveur, ce qui est inutile et inutile.

J'ai besoin pour le bouton Retour sur le détail pour travailler, ce qui signifie revenir à la liste. Y a-t-il un moyen de mettre List dans la pile sans l'instancier et le rendre actuellement en provoquant une charge supplémentaire sur mon serveur?

Répondre

0

solution que je peux Simplest penser est d'envoyer un paramètre à la composante de la liste et la vérification du paramètre avant de faire la demande ou le rendu.

Exemple

import { NavigationActions } from 'react-navigation' 

const resetAction = NavigationActions.reset({ 
    index: 1, 
    actions: [ 
    NavigationActions.navigate({ routeName: 'List', params: { reset: true }}), 
    NavigationActions.navigate({ routeName: 'Detail', params: {id: theId}) 
    ] 
}) 
this.props.navigation.dispatch(resetAction) 

class List extends Component { 
    // ... 
    componentDidMount() { 
    //example for control 
    let list = []; 

    if(this.props.navigation.state.params.reset !== true) { 
     // populate list 
    } 
    this.setState({ list }); 
    } 
    // ... 
} 
+0

Le problème avec cette approche est que lorsque l'utilisateur appuie sur le bouton retour, la liste est vide car le composant de liste doit encore rendre, à l'exception sans données. Je pense que dans mon cas, je vais rester avec le comportement par défaut et laisser le fetch se produire. Merci d'avoir répondu. –

+0

@TimScott Eh bien, c'est un peu confus alors. Vous voulez finalement que la liste soit rendue alors puisqu'il y a une chance de 'goBack()'. Ensuite, vous pouvez vérifier [cette réponse] (https://stackoverflow.com/a/46796224/2315280) pour une approche complémentaire à cette réponse. – bennygenel