Avec react-navigation
, vous pouvez le faire.
Exemple de code fait en 2 étapes :
-
Ajouter les auditeurs en componentDidMount
ou componentWillMount
this.subs = [
this.props.navigation.addListener('didFocus', (payload) => this.componentDidFocus(payload)),
];
ou
this.subs = [
this.props.navigation.addListener('didFocus', this.componentDidFocus),
this.props.navigation.addListener('willBlur', this.componentWillBlur),
];
Ensuite, vous ne pouvez rien faire dans componentDidFocus
, comme l'extraction de données, mise à jour des données,...
-
En componentWillUnmount
, retirez les auditeurs
componentWillUnmount() {
this.subs.forEach(sub => sub.remove());
}
Référence de l'API de Documents :
Réagir la navigation v3.x, v4.x:
addListener
- Abonnez-vous aux mises à jour de navigation du cycle de vie
Réagir de Navigation émet des événements aux composants d'un écran de s'abonner à
eux:
-
willFocus
- l'écran se concentrer
-
didFocus
- l'écran concentré (si il y a une transition, la transition terminée)
-
willBlur
- l'écran est floue
-
didBlur
- l'écran floue (si il y a une transition, la transition terminée)
Réagir de la navigation 3.x, 4.x exemple:
const didBlurSubscription = this.props.navigation.addListener(
'didBlur',
payload => {
console.debug('didBlur', payload);
}
);
// Remove the listener when you are done
didBlurSubscription.remove();
La charge utile JSON:
{
action: { type: 'Navigation/COMPLETE_TRANSITION', key: 'StackRouterRoot' },
context: 'id-1518521010538-2:Navigation/COMPLETE_TRANSITION_Root',
lastState: undefined,
state: undefined,
type: 'didBlur',
};
Ref: https://reactnavigation.org/docs/en/navigation-prop.html#addlistener-subscribe-to-updates-to-navigation-lifecycle