React-native-router-flux: Actions.refresh ne fonctionne pas

Créé le 18 oct. 2017  ·  24Commentaires  ·  Source: aksonov/react-native-router-flux

Version

Dites-nous quelles versions vous utilisez :

  • réagir-natif-routeur-flux v4.0.0-beta.12
  • réagir natif v0.46.4

Comportement attendu

Actions.refresh() actualise la scène actuelle.
Si mon approche était erronée ou si Actions.refresh a des exigences, veuillez me fournir les informations

Comportement réel

const ConnectRouter = connect()(Router);

const Routes = () => (
  <ConnectRouter>
    <Scene key="root">
      <Scene key="launchScreen" component={LoadingFull} hideNavBar />
      <Scene key="login" component={LoginForm} hideNavBar type={ActionConst.RESET} />
      <Scene key="lostPassword" component={LostPasswordForm} hideNavBar />
      <Scene key="dashboard" component={Dashboard} hideNavBar type={ActionConst.RESET} />
      <Scene key="search" component={SearchResult} hideNavBar />
    </Scene>
  </ConnectRouter>
);

Lorsque j'étais sur la scène de recherche (composant simple avec état), j'essayais de rafraîchir la scène en utilisant Actions.refresh. Mais d'une manière ou d'une autre, cela n'a pas fonctionné du tout.

Étapes à reproduire

  1. À l'aide de la liste de scènes fournie, accédez à la recherche de composants (il s'agissait simplement d'un composant avec l'état)
  2. déclencher des actions. rafraîchir en appuyant sur le bouton / déclencher un événement
needs response from author

Commentaire le plus utile

@jaysassyinfotech
Actions.refresh({ clé : Actions.currentScene }); ne fonctionne pas la deuxième fois
Ça marche si tu fais comme ça :)
Actions.refresh({clé : Math.random()})

Tous les 24 commentaires

+1
je veux utiliser renderBackButton de la scène. Mon exemple de code,

public componentWillMount (): void {
               Actions.refresh({
            renderBackButton: this.renderBackButton.bind(this),
            onRight: this.onRightButtonPress.bind(this)
        });
}

Ça ne fonctionne pas. Je pense que c'est le même problème.

Essayez leftButton au lieu de renderBackButton et transmettez-lui Component.

@kesha-antonov Ça ne marche pas. Je crée un nouveau problème pour cela.

Ça marche pour moi. rnrf-4-beta22

leftButton pour l'icône de gauche
right pour l'icône de droite

public componentWillMount (): void {
this.props.navigation.setParams({
onRight : () => {this.myOnRight();},
titredroit:'nouveautitre',
});
}
Cela fonctionne pour moi.

Jésus, je suis venu ici pour chercher une réponse au problème initial.
S'il vous plaît, essayez de ne pas vous greffer sur des problèmes non liés !

J'ai le même problème MAIS lors de la mise à jour du magasin (mobx)

<strong i="7">@observer</strong>
class Custom extends Component {
  render() {

    // prints every time I update state, this's ok!
    console.log('update', store.session.get('logged'))

    return (
      <Router>
        <Scene key="root">
          <Scene key="login"
            component={login}
            type="replace"
            onEnter={() => {
                // ONLY enter here once
                console.log('onEnter');
                return store.session.get('logged')
            }}
            success="recents"
          />
          <Scene key="recents" component={recents} />
        </Scene>
      </Router>
    )
  }
}

J'ai essayé de déclencher le 're-render' en appelant Actions.refresh() après la mise à jour du magasin, mais onEnter ne répond pas.

  _onPressButton() {
    store.session.set('logged', !store.session.get('logged')) // invert the value in store
    Actions.refresh() // tested with { key: 'login' } too
  }

issue

@aksonov Pourriez-vous nous indiquer la bonne direction ? :prier:

salut

J'ai le même problème ... Lorsque j'essaie de rafraîchir avec Actions.refresh() rien ne se passe

import React, { Component } from 'react';
import {
    View,
    Text,
    Button,
} from 'react-native';

import { Actions } from 'react-native-router-flux';

export default class Types extends Component {

    constructor(props) {
        super(props);
        console.log("Constructor Types")
    }

    componentWillMount() {
        console.log('Will mount Types')
    }

    componentWillUpdate() {
        console.log("Will Update Types")
    }

    componentWillUnmount() {
        console.log("will Unmont Types")
    }
    render() {
        console.log("render Types")
        return (
            <Button title='refresh' onPress={() => Actions.refresh()}/>
        )
    }
}

même problème ici, j'utilise redux et lorsque j'essaie d'actualiser le bouton droit, il ne se met tout simplement pas à jour.

Veuillez reproduire le problème avec Exemple de projet.

Actions.refresh({ key: Actions.currentScene }); ne fonctionne pas la deuxième fois
https://github.com/aksonov/react-native-router-flux/issues/2862
@aksonov

@jaysassyinfotech
Actions.refresh({ clé : Actions.currentScene }); ne fonctionne pas la deuxième fois
Ça marche si tu fais comme ça :)
Actions.refresh({clé : Math.random()})

@ cosinus84 Monsieur, vous êtes une bouée de sauvetage.

@ cosinus84 C'est vraiment du travail. Wow
Mais y a-t-il une explication pourquoi Math.random() fait toutes les astuces ?

@ cosinus84 tu déchires mec (y)

Espérons que le hasard n'est pas nécessaire pour la dernière version maintenant

@aksonov S'il vous plaît, pouvez-vous lister les accessoires (avec leurs fonctions) que nous pouvons utiliser dans Actions.refresh() car les accessoires de scène ne semblent pas fonctionner ici.

Vous pouvez vérifier l'application Exemple et ses appels d'actualisation - cela fonctionne bien avec la dernière version 4.0.5. N'hésitez pas à cloner et à modifier l'exemple en conséquence pour illustrer le problème.

Oui, cela fonctionne bien mais je vous suggère de faire une liste d'accessoires à utiliser avec les appels d'actualisation car nous ne savons peut-être pas lequel utiliser et quand.
Par exemple, pour rendre le bouton de retour, nous devons utiliser leftButton prop mais je ne le savais pas avant de lire le commentaire de @kesha-antonov

ça marche

@preetluv pense -t-il à me dire comment vous l'avez réparé ?

@preetluv voir la réponse de cosinus84

vous pouvez faire ce qui suit : -

Actions.pop()
setTimeout(()=> Actions.refresh({"somePropToRefresh":Math.random(),"yourProp":"pour actualiser
écran précédent en revenant"}),0.5);

Vous pouvez vérifier le "yourProp" dans componentWillReceiveProps dans l'écran précédent après avoir fait retour.

J'utilise react-native-router-flux 4.2.0-beta.2 et ça marche avec setTimeout

Cette page vous a été utile?
0 / 5 - 0 notes